NC17942J(莫队算法)
2021/7/15 20:08:13
本文主要是介绍NC17942J(莫队算法),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
给出一个序列,每次询问区间内出现次数恰好是k的元素个数。
//c[maxn]维护出现i次的数有多少 //cc[maxn]维护第i个数出现多少次 //然后莫队 #include<bits/stdc++.h> using namespace std; const int maxn=4e4+100; int c[maxn],cc[maxn]; int belong[maxn]; int sz,bnum; struct node { int l,r,k,id; bool operator < (const node &b) const { return (belong[l]^belong[b.l])?belong[l]<belong[b.l]:((belong[l]&1)?r<b.r:r>b.r); } }q[maxn]; int n,m,a[maxn],ans[maxn]; int main () { scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) scanf("%d",a+i),cc[a[i]]++; int l=1,r=n; sz=sqrt(n); bnum=n/sz+(n%sz>0); for (int i=1;i<=bnum;i++) { for (int j=(i-1)*sz+1;j<=i*sz;j++) { belong[j]=i; } } for (int i=0;i<=4e4;i++) { c[cc[i]]++; } for (int i=1;i<=m;i++) { scanf("%d%d%d",&q[i].l,&q[i].r,&q[i].k); q[i].id=i; } sort(q+1,q+m+1); for (int i=1;i<=m;i++) { while (l<q[i].l) { c[cc[a[l]]]--; cc[a[l]]--; c[cc[a[l]]]++; l++; } while (l>q[i].l) { l--; c[cc[a[l]]]--; cc[a[l]]++; c[cc[a[l]]]++; } while (r<q[i].r) { r++; c[cc[a[r]]]--; cc[a[r]]++; c[cc[a[r]]]++; } while (r>q[i].r) { c[cc[a[r]]]--; cc[a[r]]--; c[cc[a[r]]]++; r--; } ans[q[i].id]=c[q[i].k]; } for (int i=1;i<=m;i++) printf("%d\n",ans[i]); }
这篇关于NC17942J(莫队算法)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-05在 etcd 中怎么看有多少客户端在监视特定键 (watch)-icode9专业技术文章分享
- 2024-11-05uniapp 怎么实现返回上一页效果-icode9专业技术文章分享
- 2024-11-05UniApp 中则么实现检查一个 URL 是否以 "http://" 开头功能-icode9专业技术文章分享
- 2024-11-05怎么使用nslookup指定dns解析?-icode9专业技术文章分享
- 2024-11-05shopify 中 的 analyticsToken 一般多久过期?-icode9专业技术文章分享
- 2024-11-05array_intersect_key 有没有前后顺序-icode9专业技术文章分享
- 2024-11-05在 CodeIgniter 3.x 中,怎么批量插入返回值?-icode9专业技术文章分享
- 2024-11-05初学者必备:轻松入门TypeScript (ts)编程
- 2024-11-05TypeScript 入门教程:从零开始学习
- 2024-11-05TypeScript入门指南:从基础到实践