bzoj3236 作业 莫队+树状数组
来源:互联网 发布:js 数组存在值 编辑:程序博客网 时间:2024/06/05 14:05
莫队+树状数组
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#define N 100055#define M 1000066using namespace std;int gy[N],be[N],c[M],cc[M],n,m,nn,maxn,tot,num[N];struct Query{int l,r,a,b,id,ans1,ans2;}qr[M];bool cmp1(Query a,Query b){if(be[a.l]==be[b.l])return a.r<b.r;return be[a.l]<be[b.l];}bool cmp2(Query a,Query b){return a.id<b.id;}int lowbit(int x){return x&(-x);}void add(int x,int y){int xx=x;if(y==1&&++num[xx]==1){while(xx<=maxn){cc[xx]++;xx+=lowbit(xx);}}if(y==-1&&--num[xx]==0){while(xx<=maxn){cc[xx]--;xx+=lowbit(xx);}}while(x<=maxn){c[x]+=y;x+=lowbit(x);}}int query(int x){if(x>maxn) x=maxn;int ans=0;while(x){ans+=c[x];x-=lowbit(x);}return ans;}int query1(int x){if(x>maxn) x=maxn;int ans=0;while(x){ans+=cc[x];x-=lowbit(x);}return ans;}void work(){int l=1,r=0;tot=0;for(int i=1;i<=m;i++){while(l<qr[i].l) add(gy[l++],-1);while(l>qr[i].l) add(gy[--l],1);while(r<qr[i].r) add(gy[++r],1);while(r>qr[i].r) add(gy[r--],-1);qr[i].ans1=query(qr[i].b)-query(qr[i].a-1);qr[i].ans2=query1(qr[i].b)-query1(qr[i].a-1);}}int main(){scanf("%d%d",&n,&m); nn=(int)sqrt(n);for(int i=1;i<=n;i++){scanf("%d",&gy[i]);be[i]=(i-1)/nn+1;maxn=max(maxn,gy[i]);}int l,r,a,b;for(int i=1;i<=m;i++){scanf("%d%d%d%d",&l,&r,&a,&b);qr[i].l=l; qr[i].r=r;qr[i].a=a; qr[i].b=b;qr[i].id=i;}sort(qr+1,qr+m+1,cmp1);work();sort(qr+1,qr+m+1,cmp2);for(int i=1;i<=m;i++)printf("%d %d\n",qr[i].ans1,qr[i].ans2);return 0;}
阅读全文
0 0
- bzoj3236 作业 莫队+树状数组
- [bzoj3236][Ahoi2013]作业(莫队+树状数组)
- 莫队+分块+树状数组 【Ahoi2013】 作业 bzoj3236
- BZOJ3236 作业 [莫队算法][树状数组]
- [ 莫队 树状数组 ] [ AHOI2013 ] BZOJ3236
- Bzoj3236:[Ahoi2013]作业:莫队算法+树状数组
- 【BZOJ3236】【AHOI2013】作业 线段树 分治 树状数组
- BZOJ3236: [Ahoi2013]作业 莫队+分块
- [BZOJ3236][Ahoi2013]作业(莫队+分块)
- 莫队+树状数组 AHOI 作业
- [bzoj3236][AHOI2013]作业
- BZOJ3236: [Ahoi2013]作业(权值分块+莫队)
- 【洛谷】2717 寒假作业 树状数组
- bzoj3289 -- 莫队+树状数组
- bzoj3289 树状数组+莫队
- BZOJ 3236: [Ahoi2013]作业|莫队算法|树状数组
- BZOJ 3289 莫队 树状数组
- BZOJ 3236 莫队+树状数组
- 2017年最好的JavaScript库
- 0725-jQuery
- 0034_Search for a Range
- Git(6)——远程仓库
- 子承父类
- bzoj3236 作业 莫队+树状数组
- java 反射机制
- 链表翻转【比如链表1→2→3→4→5→6,k=2, 翻转后2→1→4→3→6→】
- ssm+bootstrap验证练习01注册验证(方法二)--代码实现
- 【学习笔记】天嵌2440第三季下学期——linux多线程同步
- HDU1896 Stones【模拟+优先队列】
- python语法基础入门
- 09 在ZStack里的定时器应用
- 17 多校