[BZOJ3524][Poi2014]Couriers(主席树)
2016-05-02 17:33
537 查看
题目描述
传送门题解
建n棵权值线段树,分别表示区间[1,1] [1,2] [1,3]……[1,n],查询的时候类似前缀和相减即可。类似主席树的思想线段树动态开点。
刚开始傻逼了,区间中出现次数超过(r-l+1)/2的数只可能有一个啊。
代码
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> using namespace std; const int max_n=5e5+5; int n,m,cnt,x,y,sz,ans; bool flag; int a[max_n],p[max_n],num[max_n],val[max_n],root[max_n]; int sum[max_n*20],ls[max_n*20],rs[max_n*20]; inline int cmp(int x,int y){return a[x]<a[y];} inline void build(int &now,int l,int r,int x){ int mid=(l+r)>>1; sum[++sz]=sum[now]+1; ls[sz]=ls[now]; rs[sz]=rs[now]; now=sz; if (l==r) return; if (x<=mid) build(ls[now],l,mid,x); else build(rs[now],mid+1,r,x); } inline int query(int x,int y,int l,int r,int k){ int mid=(l+r)>>1; if (l==r) return l; int suml=sum[ls[y]]-sum[ls[x]],sumr=sum[rs[y]]-sum[rs[x]]; if (suml>=k) return query(ls[x],ls[y],l,mid,k); else if (sumr>=k) return query(rs[x],rs[y],mid+1,r,k); else return 0; } int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;++i) scanf("%d",&a[i]),p[i]=i; sort(p+1,p+n+1,cmp); for (int i=1;i<=n;++i) if (a[p[i]]!=a[p[i-1]]) num[p[i]]=++cnt; else num[p[i]]=cnt; for (int i=1;i<=n;++i) val[num[i]]=a[i]; sz=0; root[0]=0; for (int i=1;i<=n;++i){ root[i]=root[i-1]; build(root[i],1,cnt,num[i]); } for (int i=1;i<=m;++i){ scanf("%d%d",&x,&y); flag=false; ans=0; ans=query(root[x-1],root[y],1,cnt,(y-x+1)/2+1); printf("%d\n",val[ans]); } }
总结
注意算好时间复杂度。注意如果查询的时候每次要递归到每一个叶节点的话时间复杂度就退化成了O(n),和线段树的建树差不多。所以要避免这样的思路。
相关文章推荐
- STM32时钟源
- 怎样用产品思维来做好PPT
- android studio 工具
- hdu 5339 Untitled (dfs)
- 图片做按钮
- IO端口和IO内存的区别 转
- 福州大学第十三届程序设计竞赛_重现解题报告
- visual studio 版本号(vc、vs)
- LU分解(matlab实现)
- HDU-4856 Tunnels(BFS&&状压DP)
- 2013山东省第三届ACM省赛 Mine Number
- linux tar .gz .zip 打包 解压缩 压缩命令
- 02-线性结构1 一元多项式的乘法与加法运算[网易云课堂-数据结构]
- Android图片压缩终极解决方案,是的,终极,终极,终极
- hdu 5437 Alisha’s Party(优先队列)
- 26. Remove Duplicates from Sorted Array
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- 我的idea和AS的exe.vmoptions设置
- SQLite
- 编辑器CocoStudio和CocosBuilder的对比