首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
【BZOJ2223&&3524】PATULJCI [主席树]
】的更多相关文章
【BZOJ2223&&3524】PATULJCI [主席树]
PATULJCI Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description Input 第一行两个整数n,INF,表示序列长度和ai的上限: 第二行有n个数,表示ai: 然后有一个整数m,表示询问个数: 接下来每行两个l,r,表示询问区间[l,r]中的答案. Output 输出m行,表示对于每个询问的答案.如果有这个数,则输出“yes”,然后输出数的值:否则输出“no”. Sample Input…
[bzoj3524==bzoj2223][Poi2014]Couriers/[Coci 2009]PATULJCI——主席树+权值线段树
题目大意 给定一个大小为n,每个数的大小均在[1,c]之间的数列,你需要回答m个询问,其中第i个询问形如\((l_i, r_i)\),你需要回答是否存在一个数使得它在区间\([l_i,r_i]\)中出现至少\(\frac{r-l+1}{2}\)次. 题解 第一次写主席树. 不难发现,对于一个询问,只有可能要么有解,要么有一个解. 考虑到每个数均在一个确定的区间内,我们考虑开一棵权值线段树(以前一直用这种方法,但不知到这就是权值线段树)来记录每一个数字的出现次数. 考虑到他要求询问一个区间,我们只…
BZOJ2223[Coci 2009]PATULJCI——主席树
题目描述 输入 先输入一个数n,然后一个数表示这n个数中最大的是多少,接下来一行n个数.然后一个数m,最后m行询问每次两个数l,r. 输出 no或者yes+这个数 样例输入 10 3 1 2 1 2 1 2 3 2 3 3 8 1 2 1 3 1 4 1 5 2 5 2 6 6 9 7 10 样例输出 noyes 1noyes 1noyes 2noyes 3 提示 Notice:输入第二个整数是序列中权值的范围Lim,即1<=ai(1<=i<=n)<=Lim. 1<=Lim…
【bzoj2223】[Coci 2009]PATULJCI 主席树
题目描述 样例输入 10 3 1 2 1 2 1 2 3 2 3 3 8 1 2 1 3 1 4 1 5 2 5 2 6 6 9 7 10 样例输出 no yes 1 no yes 1 no yes 2 no yes 3 题目大意 第一行输入n和lim,为序列数的个数和数的范围(1≤a[i]≤lim) 第二行输入n个数. 第三行输入m,为询问个数. 以下m行输入询问,如题. 对于每个询问,如果存在,输出yes和这个数,否则输出no. 题解 bzoj格式错了... 主席树. 对于每个询问,判断它能…
BZOJ 3524 Couriers | 主席树
BZOJ 3524 Couriers 题意 求一个区间内出现超过区间长度的一半的数,如果没有则输出0. 题解 我可能太菜了吧--这道题愣是没想出来-- 维护权值主席树,记录每个数都出现过多少次: 查询的时候,这个数要么在较小的那一部分,要么在较大的那一部分:如果两部分的数的总数都不大于一开始那个"区间长度的一半",则不存在这样的数. #include <cstdio> #include <cmath> #include <cstring> #incl…
BZOJ 2223 [Coci 2009]PATULJCI | 主席树练习 (好像是个权限题啊)
题目: 给个序列,问[l,r]区间内是否存在x>(r-l+1)>>1 题解: 好像大家都觉得这个题比较简单,没人写题解啊 先说BZOJ样例的格式应该是,第二个数是序列中数的范围(就是不用离散化) 10 3 1 2 1 2 1 2 3 2 3 3 8 1 2 1 3 1 4 1 5 2 5 2 6 6 9 7 10 这是经典的主席树问题, 按序列顺序依次让a[i]位置++,维护区间数的数目 我们二分答案然后从root[l-1]和root[r]开走 显然答案x满足sum[代表点x的节点]&g…
BZOJ 2223: [Coci 2009]PATULJCI 主席树
Code: #include<bits/stdc++.h> #define maxn 300001 #define mid ((l+r)>>1) using namespace std; inline void setIO(string s) { string in=s+".in"; freopen(in.c_str(),"r",stdin); } int cnt, cc=0; int ls[maxn*20],rs[maxn*20],sumv…
主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers
题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题)对于一个节点,如果左儿子的sum小于等于(R-L+1)/2,则答案不可能在左儿子中:右儿子同理.然后对有可能的儿子递归寻找答案,如果左右儿子都不可能,则不存在答案. 代码: BZOJ 3524: #include<cstdio> #include<cstring> #include&l…
2018.09.30 bzoj2223: [Coci 2009]PATULJCI(主席树)
传送门 主席树经典题目. 直接利用主席树差分的思想判断区间中数的个数是否合法然后决定左走右走就行了. 实际上跟bzoj3524是同一道题. 代码: #include<bits/stdc++.h> #define N 300005 using namespace std; int n,m,sig,rt[N],ql,qr; struct Tree{ int son[N*30][2],siz[N*30],tot; inline void update(int&p,int las,int l,…
BZOJ 3524: [Poi2014]Couriers [主席树]
3524: [Poi2014]Couriers Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 1892 Solved: 683[Submit][Status][Discuss] Description 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. Input 第一行两个数n,m.第二行n个数,a[i].接下来m行,…