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[ ...
随机推荐
- 折腾Vscode写C++
一直以来都是用Sublime Text3写C/C++.因为ST配置简单,轻量.闲来没事才弄一弄. 1. 新建文件夹C++Code,并且再建立一个bulid文件夹来放要写的代码. 2. 在Vscod ...
- 【A* 网络流】codechef Chef and Cut
高嘉煊讲的杂题:A*和网络流的练手题 题目大意 https://s3.amazonaws.com/codechef_shared/download/translated/SEPT16/mandarin ...
- Git学习第一天--安装Git和创建版本库
Windows上安装Git msysgit是Windows版的Git,从https://git-for-windows.github.io下载(备份:百度网盘),然后按默认选项安装即可. 安装完成后, ...
- python 获取项目的根路径
root_path = os.path.abspath(os.path.dirname(__file__)).split('shippingSchedule')[0] shippingSchedule ...
- exa命令详解
exa 是 ls 文件列表命令现代化替代品. 官网:https://the.exa.website/ GitHub:https://github.com/ogham/exa 后续整理中……
- asp.net core-项目开发中问题汇总
无法启动进程\Program File\dotnet\dotnet.exe.进程创建失败,出现错误:系统找不到指定的文件如下图: 解放方案:1.修改系统环境变量 2.重启电脑
- 【CSS】多行溢出显示省略号
display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3;//超出三行隐藏 overflow: hidden; ...
- RESTful API架构和oauth2.0认证机制(概念版)
1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...
- eBay 表结构
erp_ebay_list 建表语句 CREATE TABLE `erp_ebay_list` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `na ...
- 我的Hibernate学习
以下博客均为引用, 侵删 Hibernate初级 HQL和SQL的区别 https://blog.csdn.net/aaa1117a8w5s6d/article/details/7757097 ...