[ 莫队 树状数组 ] [ AHOI2013 ] BZOJ3236
来源:互联网 发布:浏览器缺少java插件 编辑:程序博客网 时间:2024/06/10 19:21
%%%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 1000010struct Node{ int l,r,a,b,f;}q[M];int i,j,k,n,m,p,b[N],a[N],c[2][N],s,Res,Ans[2][M];int L,R,f[N];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;}
阅读全文
1 0
- [ 莫队 树状数组 ] [ AHOI2013 ] BZOJ3236
- [bzoj3236][Ahoi2013]作业(莫队+树状数组)
- 莫队+分块+树状数组 【Ahoi2013】 作业 bzoj3236
- Bzoj3236:[Ahoi2013]作业:莫队算法+树状数组
- 【BZOJ3236】【AHOI2013】作业 线段树 分治 树状数组
- bzoj3236 作业 莫队+树状数组
- BZOJ3236: [Ahoi2013]作业 莫队+分块
- [BZOJ3236][Ahoi2013]作业(莫队+分块)
- [bzoj3236][AHOI2013]作业
- BZOJ3236 作业 [莫队算法][树状数组]
- BZOJ3236: [Ahoi2013]作业(权值分块+莫队)
- BZOJ 3236: [Ahoi2013]作业|莫队算法|树状数组
- bzoj3289 -- 莫队+树状数组
- bzoj3289 树状数组+莫队
- 【bzoj3238】[Ahoi2013]差异 后缀数组+单调栈
- bzoj 3238: [Ahoi2013]差异 后缀数组
- 【bzoj3238】[Ahoi2013]差异 后缀数组+单调栈
- 【bzoj3238】【AHOI2013】【差异】【后缀数组+单调栈】
- Easyui dataGrid 动态insertRow 包含datebox、validatebox组件,样式失效问题
- NKOJ 2698 Nicole的博客 (动态树+最小生成树)
- redis基础
- %00截断问题
- 输入多个半径,求面积、周长
- [ 莫队 树状数组 ] [ AHOI2013 ] BZOJ3236
- 【排序】冒泡排序
- [Leetcode] 487. Max Consecutive Ones II 解题报告
- Ubuntu17.04安装QQ和微信
- try...catch...finally和throws
- Yaml介绍及JYaml将数据写入yaml文件
- 杭code1008
- 7.1 分析并写出下面程序的运行结果
- Python安装