BZOJ 2223: [Coci 2009]PATULJCI 主席树
题目描述:动态求出现次数大于等于区间一半长度的数字.
题解: 对序列维护一个主席树即可.
#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[maxn*20],root[maxn];
void build(int l,int r,int &o)
{
o=++cnt;
if(l==r) return;
if(mid>=l) build(l,mid,ls[o]);
if(r>mid) build(mid+1,r,rs[o]);
}
int update(int l,int r,int k,int x)
{
int oo=++cnt;
sumv[oo]=sumv[x]+1;
ls[oo]=ls[x], rs[oo]=rs[x];
if(l==r) return oo;
if(k<=mid) ls[oo]=update(l,mid,k,ls[x]);
else rs[oo]=update(mid+1,r,k, rs[x]);
return oo;
}
int query(int u,int v,int l,int r)
{
if(l==r)
{
if(sumv[v]-sumv[u] > cc) return l;
return -1;
}
int tmp=sumv[ls[v]]-sumv[ls[u]];
if(tmp > cc) return query(ls[u], ls[v], l, mid);
else return query(rs[u], rs[v], mid + 1, r);
}
int main()
{
// setIO("input");
int n,m,i,a,Q,l,r;
scanf("%d%d",&n,&m);
build(1,m,root[0]);
for(i=1;i<=n;++i)
{
scanf("%d",&a);
root[i]=update(1,m,a,root[i-1]);
}
scanf("%d",&Q);
while(Q--)
{
scanf("%d%d",&l,&r);
cc=(r-l+1)>>1;
a = query(root[l-1], root[r], 1, m);
if(a==-1) printf("no\n");
else printf("yes %d\n", a);
}
return 0;
}
BZOJ 2223: [Coci 2009]PATULJCI 主席树的更多相关文章
- BZOJ 2223 [Coci 2009]PATULJCI | 主席树练习 (好像是个权限题啊)
题目: 给个序列,问[l,r]区间内是否存在x>(r-l+1)>>1 题解: 好像大家都觉得这个题比较简单,没人写题解啊 先说BZOJ样例的格式应该是,第二个数是序列中数的范围(就是 ...
- 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[ ...
随机推荐
- Java String常见问题
一.怎样推断两个String是否相等??使用"=="还是使用"equals()"? 对String来说."=="是用来推断两个字符串(对象) ...
- 稀疏表达是要求信号在该模型下的sparse code,只有少数的non-zero elements
为什么sparse representation比起其它成分分析方法(DFT,Wavelet)能得到更好的效果? - 知乎 https://www.zhihu.com/question/241241 ...
- a non-linear editing software
VLMC, open source video editor - VideoLAN http://www.videolan.org/vlmc/
- 修改版Putty,可保持密码
修改版Putty,可保持密码: http://files.cnblogs.com/findumars/putty_v6.0.rar 转自: http://unmi.cc/putty-auto-logi ...
- JMeter快捷键图标制作 去掉cmd命令窗口
使用jmeter时: 如果使用默认的jmeter.bat启动的话,会出现一个CMD命令窗口之后再会启动jmeter工作界面 直接启用ApacheJMeter.jar文件即可跳过CMD命令窗口启动jme ...
- 【Android】Android输入子系统【转】
本文转载自:https://www.cnblogs.com/lcw/p/3506110.html Linux输入子系统回顾 1:为什么要回顾linux输入子系统?这个问题后面自然就知道了 1.linu ...
- iOS 开发 公司开发者账号,在多台Mac上合作开发,共用一个账号和证书--图文详解
参考 导出证书申请的MAC里的Xcode的开发者账号 .developerprofile 导出的开发者账号文件.developerprofile 导出PKCS12既是.p12文件 所拷贝的资料, .d ...
- [翻译]NUnit--Getting Started(二)
Getting Started with NUnit 如果你打算开始学习,到下载页面选择一个NUnit版本.安装页面包含了安装说明. 开始NUnit阅读Quick Start页面.验证了一个C#银行应 ...
- BZOJ_4753_[Jsoi2016]最佳团体_树形背包+01分数规划
BZOJ_4753_[Jsoi2016]最佳团体_树形背包+01分数规划 Description JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号.每个候选人 ...
- 8 Range 对象
8.1 引用Range 引用Range的主要方法: Application.ActiveCell Application.Range Application.Selection Worksheet.C ...