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…
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…
[Coci 2009]PATULJCI Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1286  Solved: 553[Submit][Status][Discuss] Description Input   Output 10 31 2 1 2 1 2 3 2 3 381 21 31 41 52 52 66 97 10 Sample Input noyes 1noyes 1noyes 2noyes 3 Sample Output   HINT…
题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题)对于一个节点,如果左儿子的sum小于等于(R-L+1)/2,则答案不可能在左儿子中:右儿子同理.然后对有可能的儿子递归寻找答案,如果左右儿子都不可能,则不存在答案. 代码: BZOJ 3524: #include<cstdio> #include<cstring> #include&l…
题目描述 样例输入 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格式错了... 主席树. 对于每个询问,判断它能…
题目大意 给定一个大小为n,每个数的大小均在[1,c]之间的数列,你需要回答m个询问,其中第i个询问形如\((l_i, r_i)\),你需要回答是否存在一个数使得它在区间\([l_i,r_i]\)中出现至少\(\frac{r-l+1}{2}\)次. 题解 第一次写主席树. 不难发现,对于一个询问,只有可能要么有解,要么有一个解. 考虑到每个数均在一个确定的区间内,我们考虑开一棵权值线段树(以前一直用这种方法,但不知到这就是权值线段树)来记录每一个数字的出现次数. 考虑到他要求询问一个区间,我们只…
题目描述 输入  先输入一个数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…
BZOJ_2223_[Coci 2009]PATULJCI_主席树 Description Input 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 Output no yes 1 no yes 1 no yes 2 no yes 3   区间众数,可以用主席树求. 查询时判断那边大走哪边.   代码: #include <stdio.h> #include <string.h> #include <a…
题目链接1 题目链接2 主席树模板题 两题有细节不同 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<cmath> #include<ctime> #include<queue> #include<stack…
[BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[y]|. 2种操作(k都是正整数): 1.Modify x k:将第x个数的值修改为k. 2.Query x k:询问有几个i满足graze(x,i)<=k.因为可持久化数据结构的流行,询问仅要考虑当前数列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的a[x]的graze值<=k…