莫队离线算法

简介: 莫队离线算法

题目:


给出一个长度为 n 的数列 { a[1] , a[2] , a[3] , … , a[n] },以及 m 组询问 ( l[i] ,

r[i] , k[i])。 求数列下标区间在 [ l[i] , r[i] ] 中有多少数在该区间中的出现次数与 k[i]

互质(最大公约数为1)。


输入描述:

第一行,两个正整数 n , m (1 ≤ n, m ≤ 50000)。

第二行,n 个正整数 a[i] (1 ≤ a[i] ≤ n)描述这个数列。

接下来 m 行,每行三个正整数 l[i] , r[i] , k[i] (1 ≤ l[i] ≤ r[i] ≤ n, 1 ≤ k[i] ≤ n),描述一次询问。

输出描述:

输出 m 行,即每次询问的答案。

示例1

输入

1. 10 5
2. 1 1 1 1 1 2 2 2 2 2
3. 4 7 2
4. 4 7 3
5. 4 8 2
6. 4 8 3
7. 3 8 3

输出

1. 0
2. 2
3. 1
4. 1
5. 0

题解:

莫队算法,就裸题的基础上进行修改,题目问的多少数在该区间中的出现次数与k[i]互质,用莫队来维护区间内每个数出现的次数,然后枚举区间内出现的数的次数是否与k[i]互质,枚举的话不要从1~n全部枚举,因为题目可能只给了一部分数,其他在重复,所以可以用set来存数,因为set有自动筛重的功能


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
  if(b==0)return a;
  else return gcd(b,a%b);
} 
const ll maxn=1e6+9;
ll n,m;
ll a[maxn],pos[maxn],num[maxn],ans[maxn];
struct node{
  ll l,r,k,id;
}t[maxn];
bool cmp(node a,node b)
{
  if(pos[a.l]==pos[b.l])return a.r<b.r;
  else return pos[a.l]<pos[b.l];
}
int L=1,R=0;
void del(int x)
{
  num[x]--;
}
void add(int x)
{
  num[x]++;
}
void solve(node w)
{
  while(w.l>L){del(a[L++]);}
  while(w.r>R){add(a[++R]);}
  while(w.l<L){add(a[--L]);}
  while(w.r<R){del(a[R--]);}
}
set<ll>s;
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)
  {
    cin>>a[i];
    s.insert(a[i]);
  }
  ll block=sqrt(n);
  for(int i=1;i<=m;i++)
  {
    cin>>t[i].l>>t[i].r>>t[i].k;
    t[i].id=i;
    pos[i]=i/block;
  A
  sort(t+1,t+1+m,cmp);
  for(int i=1;i<=m;i++)
  {
    solve(t[i]);
    int tot=0;
    for(set<ll>::iterator it=s.begin();it!=s.end();it++)
    {
      if(gcd(num[*it],t[i].k)==1&&num[*it])tot++;
    }
    ans[t[i].id]=tot;
  }
  for(int i=1;i<=m;i++)
  {
    cout<<ans[i]<<endl;
  }
}

目录
相关文章
|
8天前
|
机器学习/深度学习 人工智能 算法
【机器学习】RLHF:在线方法与离线算法在大模型语言模型校准中的博弈
【机器学习】RLHF:在线方法与离线算法在大模型语言模型校准中的博弈
219 6
|
1月前
|
算法 测试技术 C#
C++二分查找、离线算法:最近的房间
C++二分查找、离线算法:最近的房间
|
1月前
|
算法 测试技术 C++
C++二分查找、离线算法:最近的房间
C++二分查找、离线算法:最近的房间
|
机器学习/深度学习 算法 自动驾驶
NeurIPS 2022 Oral | 离线强化学习新范式!京东科技&清华提出解耦式学习算法
NeurIPS 2022 Oral | 离线强化学习新范式!京东科技&清华提出解耦式学习算法
138 0
|
分布式计算 算法 搜索推荐
推荐引擎的离线算法和在线算法初探
这篇帖子,就以推荐引擎产品上的离线算法和在线算法给大家说明下,并且方便后续如果在产品使用中如果发现通用的计算规则不符合自己的场景的时候,需要做一些优化的时候,也能更好地指导怎么调。
10843 0
|
2天前
|
机器学习/深度学习 自然语言处理 算法
m基于深度学习的OFDM+QPSK链路信道估计和均衡算法误码率matlab仿真,对比LS,MMSE及LMMSE传统算法
**摘要:** 升级版MATLAB仿真对比了深度学习与LS、MMSE、LMMSE的OFDM信道估计算法,新增自动样本生成、复杂度分析及抗频偏性能评估。深度学习在无线通信中,尤其在OFDM的信道估计问题上展现潜力,解决了传统方法的局限。程序涉及信道估计器设计,深度学习模型通过学习导频信息估计信道响应,适应频域变化。核心代码展示了信号处理流程,包括编码、调制、信道模拟、降噪、信道估计和解调。
23 8
|
4天前
|
算法
基于GA遗传优化的混合发电系统优化配置算法matlab仿真
**摘要:** 该研究利用遗传算法(GA)对混合发电系统进行优化配置,旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表,包括总成本随代数变化、最佳适应度随代数变化,以及不同数据的分布情况,如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外,代码示例展示了如何运用GA求解,并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理,通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置,以平衡成本、效率和可靠性。
|
5天前
|
机器学习/深度学习 算法
基于鲸鱼优化的knn分类特征选择算法matlab仿真
**基于WOA的KNN特征选择算法摘要** 该研究提出了一种融合鲸鱼优化算法(WOA)与K近邻(KNN)分类器的特征选择方法,旨在提升KNN的分类精度。在MATLAB2022a中实现,WOA负责优化特征子集,通过模拟鲸鱼捕食行为的螺旋式和包围策略搜索最佳特征。KNN则用于评估特征子集的性能。算法流程包括WOA参数初始化、特征二进制编码、适应度函数定义(以分类准确率为基准)、WOA迭代搜索及最优解输出。该方法有效地结合了启发式搜索与机器学习,优化特征选择,提高分类性能。
|
23小时前
|
机器学习/深度学习 存储 算法
基于SFLA算法的神经网络优化matlab仿真
**摘要:** 使用MATLAB2022a,基于SFLA算法优化神经网络,降低训练误差。程序创建12个神经元的前馈网络,训练后计算性能。SFLA算法寻找最优权重和偏置,更新网络并展示训练与测试集的预测效果,以及误差对比。SFLA融合蛙跳与遗传算法,通过迭代和局部全局搜索改善网络性能。通过调整算法参数和与其他优化算法结合,可进一步提升模型预测精度。
|
5天前
|
机器学习/深度学习 算法 数据可视化
基于BP神经网络的64QAM解调算法matlab性能仿真
**算法预览图省略** MATLAB 2022A版中,运用BP神经网络进行64QAM解调。64QAM通过6比特映射至64复数符号,提高数据速率。BP网络作为非线性解调器,学习失真信号到比特的映射,对抗信道噪声和多径效应。网络在处理非线性失真和复杂情况时展现高适应性和鲁棒性。核心代码部分未显示。