【AHOI 2013】【BZOJ 3236】作业
来源:互联网 发布:教育培训网络推广方案 编辑:程序博客网 时间:2024/05/23 02:03
莫队+树状数组+读入优化 75s+AC(PS:我居然先写的线段树)code:
#include<iostream>#include<algorithm>#include<cmath>#include<cstdio>#include<cstring>#define mid (l+r)/2#define lch i<<1,l,mid#define rch i<<1|1,mid+1,rusing namespace std;char * p=(char *)malloc(50000000);inline int in(){ int x=0; while(*p<'0'||*p>'9')++p; while(*p>='0'&&*p<='9')x=x*10+*p++-'0'; return x;}struct hp{ int l,r,a,b,st,num;}qst[1000001];int ans[1000001][2];int node[400001][2];int vis[1000001];int n,m,a[100001],L,R,size;int cmp(const hp &a,const hp &b){ if ((a.st<b.st)||(a.st==b.st&&a.r<b.r)) return 1; else return 0;}int lowbit(int x){return x&(-x); }inline void bit_ins0(int x,int a){ while (x<=n) {node[x][0]+=a; x+=lowbit(x);}}inline void bit_ins1(int x,int a){ while (x<=n) {node[x][1]+=a; x+=lowbit(x);}} inline int query0(int x){ int ans=0; while (x) { ans+=node[x][0]; x-=lowbit(x); } return ans;}inline int query1(int x){ int ans=0; while (x) { ans+=node[x][1]; x-=lowbit(x); } return ans; }inline void work(int i){ int l=qst[i].l,r=qst[i].r; while (L<l) { bit_ins0(a[L],-1); if (vis[a[L]]==1) bit_ins1(a[L],-1); vis[a[L]]--; L++; } while (L>l) { L--; bit_ins0(a[L],1); if (vis[a[L]]==0) bit_ins1(a[L],1); vis[a[L]]++; } while (R<r) { R++; bit_ins0(a[R],1); if (vis[a[R]]==0) bit_ins1(a[R],1); vis[a[R]]++; } while (R>r) { bit_ins0(a[R],-1); if (vis[a[R]]==1) bit_ins1(a[R],-1); vis[a[R]]--; R--; } ans[qst[i].num][0]=query0(qst[i].b)-query0(qst[i].a-1); ans[qst[i].num][1]=query1(qst[i].b)-query1(qst[i].a-1);}int main(){ int i,per; fread(p,1,50000000,stdin); n=in(),m=in(); for (i=1;i<=n;++i)a[i]=in(); per=sqrt(n); size=n; for (i=1;i<=m;++i) { qst[i].l=in(),qst[i].r=in(),qst[i].a=in(),qst[i].b=in(); qst[i].st=(qst[i].l/per)+1; qst[i].num=i; } sort(qst+1,qst+m+1,cmp); for (i=qst[1].l;i<=qst[1].r;++i) { bit_ins0(a[i],1); if (vis[a[i]]==0) bit_ins1(a[i],1); vis[a[i]]++; } ans[qst[1].num][0]=query0(qst[1].b)-query0(qst[1].a-1); ans[qst[1].num][1]=query1(qst[1].b)-query1(qst[1].a-1); L=qst[1].l; R=qst[1].r; for (i=2;i<=m;++i) work(i); for (i=1;i<=m;++i) printf("%d %d\n",ans[i][0],ans[i][1]);}
0 0
- 【AHOI 2013】【BZOJ 3236】作业
- BZOJ 3236 AHOI 2013 作业 莫队算法
- [BZOJ 3238][AHOI 2013]差异
- BZOJ 3238 AHOI 2013 差异 后缀树
- BZOJ 3238 AHOI 2013 差异 后缀数组+单调栈
- [BZOJ 3238][AHOI 2013]差异(后缀数组+单调栈)
- BZOJ 3238 AHOI 2013 差异 后缀数组 单调
- 【BZOJ 1406】【AHOI 2007】密码箱
- 莫队+树状数组 AHOI 作业
- BZOJ 1798 Ahoi 2009 维护序列seq
- BZOJ 1801 AHOI 2009 chess 中国象棋 DP
- BZOJ 1797 AHOI 2009 Mincut 最小割
- BZOJ 1264[AHOI 2006 基因匹配]
- 【BZOJ 1800】【AHOI 2009】飞行棋
- BZOJ 1800 AHOI 2009 fly 飞行棋
- BZOJ 1801 [Ahoi 2009] DP 解题报告
- bzoj 3236: [Ahoi2013]作业
- 【BZOJ 3236】 [Ahoi2013]作业
- 手把手教你把Vim改装成一个IDE编程环境(图文)
- CentOS下安装blue box
- Unique Binary Search Tree -- LeetCode
- leetcode: Compare Version Numbers
- 安装oracle
- 【AHOI 2013】【BZOJ 3236】作业
- 51单片机万年历
- ASCII 转 二进制码 in C
- C++ Primer 第五版中的Sales_data类---用来模拟Sales_item类的实现
- SAP Query 小结
- 反射投影直方图以检测待定的图像内容
- UITalbeView的使用
- 9.struts2验证
- ArcGIS API for JavaScript v3.9实现鹰眼图