[ 莫队 树状数组 ] [ AHOI2013 ] BZOJ3236
2017-12-01 20:18
267 查看
%%%PBS
大佬教我莫队cmp函数更快的写法。#include<bits/stdc++.h> using namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++; } inline void Read(int& x){ char c=nc(); for(;c<'0'||c>'9';c=nc()); for(x=0;c>='0'&&c<='9';x=(x<<3)+(x<<1)+c-48,c=nc()); } #define N 100010 #define M 1000010 struct Node{ int l,r,a,b,f; }q[M]; int i,j,k,n,m,p,b ,a ,c[2] ,s,Res,Ans[2][M]; int L,R,f ; inline bool Cmp(Node x,Node y){ return b[x.l]<b[y.l]||(b[x.l]==b[y.l]&&(b[x.l]&1?x.r<y.r:x.r>y.r)); } inline void Update(int x,int y,bool d){ for(;x<=n;x+=x&-x)c[d][x]+=y; } inline int Query(int x,bool d){ int Ans=0; for(;x;x-=x&-x)Ans+=c[d][x]; return Ans; } inline void Add(int x){ if(!f[x]){ f[x]=1; Update(x,1,1); }else f[x]++; Update(x,1,0); } inline void Del(int x){ if(!(--f[x])){ Update(x,-1,1); } Update(x,-1,0); } int main(){ Read(n);Read(m);s=sqrt(n); for(i=1;i<=n;i++)Read(a[i]); for(i=1;i<=m;i++)Read(q[i].l),Read(q[i].r),Read(q[i].a),Read(q[i].b),q[i].f=i; for(i=1;i<=n;i++)b[i]=(i-1)/s+1; sort(q+1,q+m+1,Cmp); for(i=1,L=1,R=0;i<=m;i++){ while(R<q[i].r)Add(a[++R]); while(L>q[i].l)Add(a[--L]); while(R>q[i].r)Del(a[R--]); while(L<q[i].l)Del(a[L++]); for(j=0;j<2;j++) Ans[j][q[i].f]=Query(q[i].b,j)-Query(q[i].a-1,j); } for(i=1;i<=m;i++)printf("%d %d\n",Ans[0][i],Ans[1][i]); return 0; }
相关文章推荐
- BZOJ3236 [Ahoi2013]作业 【莫队 + 树状数组】
- bzoj 3236: [Ahoi2013]作业 (莫队+分块)
- 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块
- Bzoj 3236: [Ahoi2013]作业 莫队,分块
- bzoj 3236: [Ahoi2013]作业 莫队算法+分块
- BZOJ 3809: Gty的二逼妹子序列 & 3236: [Ahoi2013]作业 [莫队]
- BZOJ 3236: [Ahoi2013]作业( 莫队 + BIT )
- 【莫队算法】【权值分块】bzoj3236 [Ahoi2013]作业
- BZOJ 3236: [Ahoi2013]作业|莫队算法|树状数组
- BZOJ3236: [Ahoi2013]作业 莫队+分块
- [BZOJ3236][Ahoi2013]作业(莫队+树状数组)
- 莫队+分块+树状数组 【Ahoi2013】 作业 bzoj3236
- BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块
- COGS.1822.[AHOI2013]作业(莫队 树状数组/分块)
- [BZOJ3236][Ahoi2013]作业(莫队+分块)
- [BZOJ 3236] [Ahoi2013] 作业 && [BZOJ 3809] 【莫队(+分块)】
- [bzoj3236][Ahoi2013]作业(莫队+树状数组)
- 【树套树】【bzoj 3236】: [Ahoi2013]作业
- bzoj 3238: [Ahoi2013]差异 后缀数组
- 【BZOJ】3110 [Zjoi2013]K大数查询 整体二分+树状数组 || 树套树