[bzoj3809] Gty的二逼妹子序列
2016-06-18 17:05
435 查看
莫队+分块。。分块修改O(1),查询O(n^0.5)
总复杂度O(n^1.5)
View Code
总复杂度O(n^1.5)
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #define ll long long using namespace std; const int maxn=100233; struct zs{int l,r,a,b,id;}q[1002333]; int B[maxn],a[maxn],mp[maxn],l[maxn],r[maxn]; int ans[1002333]; int sz[2333]; int i,j,k,n,m,kuai; int ra;char rx; inline int read(){ rx=getchar(),ra=0; while(rx<'0'||rx>'9')rx=getchar(); while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra; } inline void add(int x){sz[B[x]]+=!mp[x],mp[x]++;} inline void del(int x){mp[x]--,sz[B[x]]-=!mp[x];} inline int query(int a,int b){ register int i;int sm=0,idl=B[a],idr=B[b]; if(idl==idr){ for(i=a;i<=b;i++)sm+=mp[i]>0; return sm; } for(i=a;i<=r[idl];i++)sm+=mp[i]>0; for(i=l[idr];i<=b;i++)sm+=mp[i]>0; for(i=idl+1;i<idr;i++)sm+=sz[i]; return sm; } bool cmp(zs a,zs b){return B[a.l]==B[b.l]?((B[a.l]&1)?a.r<b.r:a.r>b.r):B[a.l]<B[b.l];} int main(){ n=read(),m=read();kuai=(int)sqrt(n)+3; for(i=1;i<=n;i++)a[i]=read(),B[i]=(i+kuai-1)/kuai; for(i=1;i<=B ;i++) l[i]=(i-1)*kuai+1,r[i]=i==B ?n:(l[i]+kuai-1); for(i=1;i<=m;i++)q[i].l=read(),q[i].r=read(),q[i].a=read(),q[i].b=read(),q[i].id=i; sort(q+1,q+1+m,cmp); register int l=1,r=0; for(i=1;i<=m;i++){ while(l>q[i].l)l--,add(a[l]); while(r<q[i].r)r++,add(a[r]); while(l<q[i].l)del(a[l]),l++; while(r>q[i].r)del(a[r]),r--; ans[q[i].id]=query(q[i].a,q[i].b); } for(i=1;i<=m;i++)printf("%d\n",ans[i]); return 0; }
View Code
相关文章推荐
- delphi 图像旋转
- csdn待改进点之17------>好友“谷哥的小弟”反馈, 评论数不一致, 请不要跟我说, 这是瞬间不同步
- 横屏输入密码时等待屏灭按power键点亮后字符消失
- cc150:哈希:基础
- 279. Perfect Squares
- nginx中的超时设置
- Java的HashMap和HashTable
- 《SQL必知必会》学习笔记之13、14章
- 短信接口API
- Android中的AppWidget(桌面小部件)
- LA 3708 Graveyard
- Android事件分发完全解析之为什么是她
- exec format error in docker
- Leetcode题解 141. Linked List Cycle
- nginx基本配置与参数说明以及Nginx中的upstream轮询机制介绍
- LA 3708 Graveyard
- [bzoj1369] [Baltic2003]Gem
- 数据挖掘入门
- First for JDBC
- Intent传递对象——Serializable和Parcelable区别