主席树初探--BZOJ3524: [Poi2014]Couriers
n<=500000个数,m<=500000个询问,每次问区间里出现次数>(R-L+1)的数字是谁,没有输出0.
写了带修改发现不会不带修改了。。。。
不带修改的话,n个点,每个点表示一个前缀,每加入一个数时,主席树上只有logn个节点的信息,所以每次只用新建logn个节点,那前缀对应线段树里其他的信息呢?直接接到上一棵树即可。详见代码或其他博客。
- #include<stdio.h>
- #include<string.h>
- #include<algorithm>
- #include<stdlib.h>
- //#include<iostream>
- using namespace std;
- int n,m;
- #define maxn 500011
- #define maxm 10000011
- struct SMT
- {
- struct Node
- {
- int son[];
- int cnt;
- }a[maxm];
- int size,n;
- void clear(int m) {n=m;size=;a[].cnt=;}
- void up(int x)
- {
- const int &p=a[x].son[],&q=a[x].son[];
- a[x].cnt=a[p].cnt+a[q].cnt;
- }
- void build(int pre,int &rt,int L,int R,int num)
- {
- rt=++size;
- a[rt].cnt=a[pre].cnt+;
- if (L==R) {a[rt].son[]=a[rt].son[]=;return;}
- const int mid=(L+R)>>;
- if (num<=mid) build(a[pre].son[],a[rt].son[],L,mid,num),a[rt].son[]=a[pre].son[];
- else build(a[pre].son[],a[rt].son[],mid+,R,num),a[rt].son[]=a[pre].son[];
- }
- void build(int pre,int &rt,int num) {build(pre,rt,,n,num);}
- }smt;
- int a[maxn],b[maxn],rt[maxn],lb;
- int main()
- {
- scanf("%d%d",&n,&m);
- for (int i=;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];
- sort(b+,b++(lb=n));lb=unique(b+,b++lb)-b-;
- for (int i=;i<=n;i++) a[i]=lower_bound(b+,b++lb,a[i])-b;
- smt.clear(lb);
- for (int i=;i<=n;i++) smt.build(rt[i-],rt[i],a[i]);
- for (int i=,x,y;i<=m;i++)
- {
- scanf("%d%d",&x,&y);x--;
- int sa=rt[x],sb=rt[y],L=,R=lb;bool ok=;
- while (L<R)
- {
- if (smt.a[smt.a[sb].son[]].cnt-smt.a[smt.a[sa].son[]].cnt>(y-x)/)
- sa=smt.a[sa].son[],sb=smt.a[sb].son[],R=(L+R)>>;
- else if (smt.a[smt.a[sb].son[]].cnt-smt.a[smt.a[sa].son[]].cnt>(y-x)/)
- sa=smt.a[sa].son[],sb=smt.a[sb].son[],L=((L+R)>>)+;
- else {ok=;break;}
- }
- if (ok) printf("%d\n",b[L]);
- else puts("");
- }
- return ;
- }
主席树初探--BZOJ3524: [Poi2014]Couriers的更多相关文章
- [BZOJ2223][BZOJ3524][Poi2014]Couriers 主席树
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 2436 Solved: 960[Submit][St ...
- bzoj3524: [Poi2014]Couriers(主席树)
主席树(可持久化权值线段树)初探... 修改一个点只对树上logn个点有影响,所以新建logn个点就行了,总共新建mlogn个点. 查询一个区间[l,r],相当于将数一个一个加进树,询问第l到第r次操 ...
- BZOJ3524[Poi2014]Couriers——主席树
题目描述 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. 输入 第一行 ...
- BZOJ3524: [Poi2014]Couriers(主席树)
题意 题目链接 Sol 严格众数只会出现一次,那么建出主席树,维护子树siz,直接在树上二分即可 #include<bits/stdc++.h> #define LL long long ...
- 主席树【bzoj3524(p3567)】[POI2014]Couriers
Description 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0 ...
- BZOJ3524 [Poi2014]Couriers 【主席树】
题目 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. 输入格式 第一 ...
- 主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers
题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题) ...
- bzoj3524 [Poi2014]Couriers/2223 [Coci 2009]PATULJCI
题目链接1 题目链接2 主席树模板题 两题有细节不同 #include<algorithm> #include<iostream> #include<cstdlib> ...
- 主席树初探--BZOJ1901: Zju2112 Dynamic Rankings
n<=10000的序列做m<=10000个操作:单点修改,查区间第k小. 所谓的主席树也就是一个值域线段树嘛..不过在这里还是%%fotile 需要做一个区间查询,由于查第k小,需要一些能 ...
随机推荐
- 417 Pacific Atlantic Water Flow 太平洋大西洋水流
详见:https://leetcode.com/problems/pacific-atlantic-water-flow/description/ C++: class Solution { publ ...
- [转]mysql日志详细解析
转自:http://pangge.blog.51cto.com/6013757/1319304 MySQL日志: 主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据 ...
- Xml学习笔记(1)
不同的xml文档构可能要用到不同的方法进行解析这里用到的是例如<student name="张三" id="1" sex="男"/&g ...
- git ---合并和删除分支
git merge 分支名 //合并子分支到当前分支 git branch -d 分支名//删除分支
- install nginx error
the error info : the HTTP gzip module requires the zlib library.You can either disable the module by ...
- -webkit/IE/Firefox的一些样式
仅限于-webkit的样式特效:-webkit-overflow-scrolling:touch;滚动时回弹效果:如果出现偶尔卡住不动的情况,那么在使用该属性的元素上不设置定位或者手动设置定位为sta ...
- webgl推荐书籍
网址:https://www.douban.com/doulist/45940373/ webgl 来自: Pasu2017-04-17创建 2017-07-25更新 推荐 关注 2 人关注 ...
- vue动态加载组件
vue动态加载组件,可以使用以下方式 <component :is="propertyname" v-for="tab in tabs"></ ...
- CAD控件使用教程 自定义实体的实现
自定义实体的实现 1 . 自定义实体... 3 1.1 说明... 3 1.2 类的类型信息... 3 1.3 worldDraw.. 4 1.4 ...
- D2. Toy Train
D2. Toy Train time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...