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的节点]>(sum[r]-sum[l-1])/2
如果右子树-右子树满足要求,那就走到右子树,然后答案应该变大
同理左子树,如果都不行就没答案了
#include<cstdio>
#define N 300000*20
using namespace std;
int root[N],lc[N],rc[N],sum[N],n,m,x,pcnt,Lim;
void insert(int x,int &y,int l,int r,int k)
{
lc[y=++pcnt]=lc[x],rc[y]=rc[x],sum[y]=sum[x]+;
if (l==r) return ;
int mid=l+r>>;
if (k<=mid) insert(lc[x],lc[y],l,mid,k);
else insert(rc[x],rc[y],mid+,r,k);
}
int query(int L,int R)
{
int l=,r=Lim,mid,lim=(R-L+)>>,x=root[L-],y=root[R];
while (l<r)
{
if (sum[y]-sum[x]<=lim) return ;
mid=l+r>>;
if (sum[lc[y]]-sum[lc[x]]>lim)
r=mid,x=lc[x],y=lc[y];
else if (sum[rc[y]]-sum[rc[x]]>lim)
l=mid+,x=rc[x],y=rc[y];
else return ;
}
return l;
}
int main()
{
scanf("%d%d",&n,&Lim);
for (int i=;i<=n;i++)
scanf("%d",&x),insert(root[i-],root[i],,Lim,x);
scanf("%d",&m);
for (int i=,l,r;i<=m;i++)
scanf("%d%d",&l,&r),(x=query(l,r))?printf("yes %d\n",x):puts("no");
return ;
}
BZOJ 2223 [Coci 2009]PATULJCI | 主席树练习 (好像是个权限题啊)的更多相关文章
- BZOJ 2223: [Coci 2009]PATULJCI 主席树
Code: #include<bits/stdc++.h> #define maxn 300001 #define mid ((l+r)>>1) using namespace ...
- bzoj 2223 [Coci 2009]PATULJCI
[Coci 2009]PATULJCI Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1286 Solved: 553[Submit][Status ...
- 主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers
题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题) ...
- 【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 ...
- [bzoj3524==bzoj2223][Poi2014]Couriers/[Coci 2009]PATULJCI——主席树+权值线段树
题目大意 给定一个大小为n,每个数的大小均在[1,c]之间的数列,你需要回答m个询问,其中第i个询问形如\((l_i, r_i)\),你需要回答是否存在一个数使得它在区间\([l_i,r_i]\)中出 ...
- BZOJ2223[Coci 2009]PATULJCI——主席树
题目描述 输入 先输入一个数n,然后一个数表示这n个数中最大的是多少,接下来一行n个数.然后一个数m,最后m行询问每次两个数l,r. 输出 no或者yes+这个数 样例输入 10 3 1 2 1 2 ...
- BZOJ_2223_[Coci 2009]PATULJCI_主席树
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 ...
- bzoj3524 [Poi2014]Couriers/2223 [Coci 2009]PATULJCI
题目链接1 题目链接2 主席树模板题 两题有细节不同 #include<algorithm> #include<iostream> #include<cstdlib> ...
- [BZOJ 2989]数列(二进制分组+主席树)
[BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[ ...
随机推荐
- Hutool Wiki For java
发现一款不错的java工具类, http://www.hutool.cn/ Hutool的使用文档. 项目见 https://github.com/looly/hutool 以及 http://git ...
- 使用Git将本地项目上传到码云
01.码云上创建一个项目 testgit (名字随意) 02.进入本地想要上传的目录,然后使用git bash 03.cd到想要上传的目录 04.$ git init 初始化一个git 本地仓库(项目 ...
- linux面试集
shell:1.$# 和 $*之类的特殊变量 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n是一个数字,表示第几个参数.例如,第一个参数就是$1 $# 传递给脚本或 ...
- python系列2之数据类型
目录 Python数据类型 python的运算符 Python的循环与判断语句 python练习 Python作业 一. Python的数据类型 1. 整型(int) <1>. 赋值 ...
- POJ:3579-Median(二分+尺取寻找中位数)
Median Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9201 Accepted: 3209 Description Gi ...
- perl语言入门总结-第3章-列表与数组
1-列表list指的是标题的有序集合, 而数组(array)则是存储列表的变量. 更精确地说,列表指的是数据,而数组指的是变量. 访问数组中的元素 ] = "yabba"; ] = ...
- Linux 安装github并配置ssh
首先,你得有个github帐号. 1.用apt-get install git的方式安装git test@er:/$ sudo add-apt-repository ppa:git-core/ppa ...
- Java代码中获取配置文件(config.properties)中内容的两种方法
方法千千万,本人暂时只总结了两种方法. (1)config.properties中的内容如图 在applicationContext.xml中配置 <!-- 引入配置文件 --> < ...
- php中utf-8转unicode
public function utf8_unicode($str) { $unicode = array(); $values = array(); $lookingFor = 1; for ($i ...
- MySQL增强半同步几个重要参数搭配的测试
Preface Semi-synchronous replication is supported since MySQL 5.5 and then enhanced graduall ...