[主席树] BZOJ 3524 [Poi2014]Couriers BZOJ 2223 [Coci 2009]PATULJCI
2016-05-13 16:28
525 查看
题目大意:区间众数[出现次数大于一半]
裸题
3524的代码
裸题
3524的代码
#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p1++; } inline void read(int &x) { char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b; } const int N=10005; int n,m; int root ,ls[21*N],rs[21*N],sum[21*N]; int ncnt; void Build(int &x,int l,int r){ x=++ncnt; if (l==r) return; int mid=(l+r)>>1; Build(ls[x],l,mid); Build(rs[x],mid+1,r); } void Modify(int &y,int x,int l,int r,int t){ y=++ncnt; int mid=(l+r)>>1; if (l==r){ sum[y]=sum[x]+1; return; } if (t<=mid) rs[y]=rs[x],Modify(ls[y],ls[x],l,mid,t),sum[y]=sum[ls[y]]+sum[rs[y]]; else ls[y]=ls[x],Modify(rs[y],rs[x],mid+1,r,t),sum[y]=sum[ls[y]]+sum[rs[y]]; } inline int Query(int x,int y){ int l=1,r=m,tmp=(y-x)>>1,mid; y=root[y],x=root[x]; while (l!=r) { mid=(l+r)>>1; if (sum[y]-sum[x]<=tmp) return 0; if (sum[ls[y]]-sum[ls[x]]>tmp) y=ls[y],x=ls[x],r=mid; else if (sum[rs[y]]-sum[rs[x]]>tmp) y=rs[y],x=rs[x],l=mid+1; else return 0; } return r; } int main() { int Q,a,l,r; freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(n); read(m); Build(root[0],1,m); for (int i=1;i<=n;i++) read(a),Modify(root[i],root[i-1],1,m,a); read(Q); while (Q--) { read(l); read(r); int ret=Query(l-1,r); ret?printf("yes %d\n",ret):printf("no\n"); } return 0; }
相关文章推荐
- 一个Activity的显示过程总结(二)
- HashMap源码解析
- windows dos命令下DOS窗口中显示UTF-8字符
- Intellij IDEA 快捷键
- 跨多个App的UI测试
- tuxedo 的下载地址 windows下用的
- Groovy学习笔记(一)基本语法
- Python Cookbook 20160513
- Android获得控件在屏幕中的绝对坐标
- keil5(MDK5)配置S3C2440裸机开发调试环境
- Android获得控件在屏幕中的绝对坐标
- 关于c++中进制输入输出
- iOS 百度地图改变popview 及改变定位图标
- objective-c中的消息转发
- 《利用Python 进行数据分析》 - 笔记(3)
- 正则表达式
- 递归实现字符串反向排列
- 大数据量高并发访问的数据库优化方法
- 基于jquery插件实现拖拽删除图片功能
- ffmpeg 编译常见错误