bzoj3781(莫队板子)
来源:互联网 发布:linux内网通外网不通 编辑:程序博客网 时间:2024/05/01 21:31
就是练一练莫队的基本结构。。。无思维含量。。。
#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;const int N=50005;int n,m,k;int a[N],pos[N];ll c[N],ans,ml,mr;struct aa{int l,r,id;ll ans;}q[N];bool cmp1(aa a,aa b){if (pos[a.l]!=pos[b.l]) return pos[a.l]<pos[b.l];return a.r<b.r;}bool cmp2(aa a,aa b){return a.id<b.id;}void updata(int i,int add){ans-=c[a[i]]*c[a[i]];c[a[i]]+=add;ans+=c[a[i]]*c[a[i]];}void solve(){ml=1;mr=0;for (int i=1;i<=m;i++){for (;mr>q[i].r;mr--) updata(mr,-1);//莫队一定要先移动右端点for (;mr<q[i].r;mr++) updata(mr+1,1);for (;ml<q[i].l;ml++) updata(ml,-1);for (;ml>q[i].l;ml--) updata(ml-1,1);q[i].ans=ans;}}int main(){scanf("%d%d%d",&n,&m,&k);int block=int(sqrt(n*1.0));for (int i=1;i<=n;i++) pos[i]=(i-1)/block+1;for (int i=1;i<=n;i++) scanf("%d",&a[i]);for (int i=1;i<=m;i++) scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;sort(q+1,q+m+1,cmp1);solve();sort(q+1,q+m+1,cmp2);for (int i=1;i<=m;i++) printf("%lld\n",q[i].ans);return 0;}
0 0
- bzoj3781(莫队板子)
- BZOJ3781【莫队算法】
- 莫队算法学习小记 bzoj3781
- bzoj3781
- bzoj3781: 小B的询问 莫队算法
- 【BZOJ3781】小B的询问【莫队算法】
- [bzoj3781]小B的询问 智障莫队
- 【bzoj2120】分块/带修改莫队板子
- 板子
- 板子
- [bzoj2038][莫队算法][板子]小Z的袜子
- bzoj2038[2009国家集训队]小Z的袜子(hose)(莫队板子)
- BZOJ3781小B的询问
- 【普通莫队选讲】BZOJ2038 BZOJ3289 BZOJ3781
- bzoj3781 小B的询问
- BZOJ3781: 小B的询问
- BZOJ3781[小B的询问]
- bzoj3781: 小B的询问
- Android关闭开机弹出SIM卡变动提示对话框
- 9.2 GDOI模拟雅礼联考Day1总结
- linux 安装fastdfs
- CXF+SpringBoot webservice
- 原码, 反码, 补码
- bzoj3781(莫队板子)
- Git学习笔记(三) - 分支管理
- 队列的抽象数据类型(abstract data type,ADT)
- PHP函数源码之SESSION实现机制
- BZOJ 1001 狼抓兔子(Dijkstra)
- SIFT算法详解
- 【HDOJ】elevator
- PAT乙级.1029. 旧键盘(20)
- Relaxation step(Dijkstra's 最短路径算法)