题目:

给个序列,问[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 | 主席树练习 (好像是个权限题啊)的更多相关文章

  1. BZOJ 2223: [Coci 2009]PATULJCI 主席树

    Code: #include<bits/stdc++.h> #define maxn 300001 #define mid ((l+r)>>1) using namespace ...

  2. bzoj 2223 [Coci 2009]PATULJCI

    [Coci 2009]PATULJCI Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1286  Solved: 553[Submit][Status ...

  3. 主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers

    题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题) ...

  4. 【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 ...

  5. [bzoj3524==bzoj2223][Poi2014]Couriers/[Coci 2009]PATULJCI——主席树+权值线段树

    题目大意 给定一个大小为n,每个数的大小均在[1,c]之间的数列,你需要回答m个询问,其中第i个询问形如\((l_i, r_i)\),你需要回答是否存在一个数使得它在区间\([l_i,r_i]\)中出 ...

  6. BZOJ2223[Coci 2009]PATULJCI——主席树

    题目描述 输入  先输入一个数n,然后一个数表示这n个数中最大的是多少,接下来一行n个数.然后一个数m,最后m行询问每次两个数l,r. 输出 no或者yes+这个数 样例输入 10 3 1 2 1 2 ...

  7. 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 ...

  8. bzoj3524 [Poi2014]Couriers/2223 [Coci 2009]PATULJCI

    题目链接1 题目链接2 主席树模板题 两题有细节不同 #include<algorithm> #include<iostream> #include<cstdlib> ...

  9. [BZOJ 2989]数列(二进制分组+主席树)

    [BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[ ...

随机推荐

  1. react事件绑定的三种常见方式以及解决Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state问题思路

    在 React 组件中,每个方法的上下文都会指向该组件的实例,即自动绑定 this 为当前组件. 而且 React 还会对这种引用进行缓存,以达到 CPU 和内存的优化.在使用 ES6 classes ...

  2. ZJOI2019Round#2

    乱听课记录 关于树的分治问题&杂题选讲 张哲宇 边分治 (边分不是很鸡肋吗) 例题一 题目大意:给出两颗有正负边权的树,求出两个点\(u,v​\)使得两棵树中\((u,v)​\)距离的和最大. ...

  3. Spring Cloud 入门Eureka -Consumer服务消费(一)

    这里介绍:LoadBalancerClient接口,它是一个负载均衡客户端的抽象定义,下面我们就看看如何使用Spring Cloud提供的负载均衡器客户端接口来实现服务的消费. 引用之前的文章中构建的 ...

  4. intellij idea 添加动态 user library(java.lang.VerifyError)【转】

    使用IDEA的时候有时要用到eclipse的user library,由于两个IDE导入library的方式不同导致我们找不到导入user library的方法. 查IDEA的官方文档,找到方法如下: ...

  5. thinkphp3.2 where 条件查询 复查的查询语句

    复查的查询语句 有的时候,我们希望通过一次的查询就能解决问题,这个时候查询条件往往比较复杂,但是却比多次查询库来的高效. 实在是搞不定的话就直接用$where[‘_string’] = ‘xxxx’, ...

  6. 636. Exclusive Time of Functions

    // TODO: need improve!!! class Log { public: int id; bool start; int timestamp; int comp; // compasa ...

  7. 删除警告的方法 python

    import warningswarnings.filterwarnings('ignore')

  8. tomcat7 配置 https安全访问

    在apache-tomcat-7.0.33-windows-x64.zip配置https,结果在配置SSL时遇到一些问题 1.用JDK自带的keytool来生成私有密钥和自签发的证书,如下: keyt ...

  9. ThinkPad 触控板双指不可以滑动

    我一直在想为什么,今天我想禁用触摸板的时候,我找到原因了. 是因为没有装驱动. http://think.lenovo.com.cn/support/driver/newdriversdownlist ...

  10. MySQL单表查询语句练习题

    /*1. 查询出部门编号为30的所有员工*/ /* 分析: 1). 列:没有说明要查询的列,所以查询所有列 2). 表:只一张表,emp 3). 条件:部门编号为30,即deptno=30 */ ; ...