题意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半

题解:

最近比赛太多,都没时间切水题了,刚好日推了道主席树裸题,就写了一下

然后

WA80

WA80

WA0

WA90

WA80

??????

结果重新审题发现没有数据范围????

哦,原来是500000,我是真的菜

因为必须要一个数出现超过一半

所以这个数肯定会在左子树和右子树中总个数和较大的那个里。

显然这样二分找到树底复杂度是logn的

如果此时树底这个点的数值大于一半,那么就输出这个解,否则puts("0")

以及:不用离散化!!!

代码如下:

#include<bits/stdc++.h>
#define lson tr[now].l
#define rson tr[now].r
using namespace std; struct tree
{
int l,r,sum,val;
}tr[]; int rt[],a[],n,m,cnt;
map<int,int> mm; inline int push_up(int now)
{
tr[now].sum=tr[lson].sum+tr[rson].sum;
} int insert(int &now,int fa,int l,int r,int pos)
{
if(!now) now=++cnt;
if(l==r)
{
tr[now].sum=tr[fa].sum+;
tr[now].val=l;
return ;
}
register int mid=(l+r)>>;
if(pos<=mid)
{
insert(tr[now].l,tr[fa].l,l,mid,pos);
tr[now].r=tr[fa].r;
}
else
{
tr[now].l=tr[fa].l;
insert(tr[now].r,tr[fa].r,mid+,r,pos);
}
push_up(now);
} inline int query(int a,int b,int l,int r,int tar)
{
if(l==r)
{
if(tr[a].sum-tr[b].sum>=tar) return l;
else return ;
}
register int mid=(l+r)>>;
register int ls=tr[tr[a].l].sum-tr[tr[b].l].sum;
register int rs=tr[tr[a].r].sum-tr[tr[b].r].sum;
if(ls>rs) return query(tr[a].l,tr[b].l,l,mid,tar);
else return query(tr[a].r,tr[b].r,mid+,r,tar);
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
{
scanf("%d",&a[i]);
insert(rt[i],rt[i-],,,a[i]);
}
int from,to;
while(m--)
{
scanf("%d%d",&from,&to);
register int mid=(to-from+)/+;
printf("%d\n",b[query(rt[to],rt[from-],,,mid)]);
}
}

洛谷P3567[POI2014]KUR-Couriers(主席树+二分)的更多相关文章

  1. 2018.09.14 洛谷P3567 [POI2014]KUR-Couriers(主席树)

    传送门 简单主席树啊. 但听说有随机算法可以秒掉%%%(本蒟蒻并不会) 直接维护值域内所有数的出现次数之和. 当这个值不大于区间总长度的一半时显然不存在合法的数. 这样在主席树上二分查值就行了. 代码 ...

  2. 洛谷P3567 [POI2014]KUR-Couriers 主席树

    挺裸的,没啥可讲的. 不带修改的主席树裸题 Code: #include<cstdio> #include<algorithm> using namespace std; co ...

  3. 洛谷P2617 Dynamic Ranking(主席树,树套树,树状数组)

    洛谷题目传送门 YCB巨佬对此题有详细的讲解.%YCB%请点这里 思路分析 不能套用静态主席树的方法了.因为的\(N\)个线段树相互纠缠,一旦改了一个点,整个主席树统统都要改一遍...... 话说我真 ...

  4. 洛谷P4587 神秘数 [FJOI2016] 主席树

    正解:主席树 解题报告: 先放下传送门QAQ 首先可以先思考如果只有一组询问,怎么解决 可以这么想,最开始一个数也麻油的时候能表示的最大的数是0嘛 然后先排个序,按顺序每次新加入一个数x,设加入这个数 ...

  5. 2018.07.07 洛谷 P3939 数颜色(主席树)

    P3939 数颜色 题目背景 大样例下发链接:http://pan.baidu.com/s/1c0LbQ2 密码:jigg 题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不 ...

  6. 洛谷P3168 [CQOI2015]任务查询系统 [主席树,差分]

    题目传送门 任务查询系统 题目描述 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任 ...

  7. 洛谷P4559 [JSOI2018]列队(主席树)

    题面 传送门 题解 首先考虑一个贪心,我们把所有的人按\(a_i\)排个序,那么排序后的第一个人到\(k\),第二个人到\(k+1\),...,第\(i\)个人到\(k+i-1\),易证这样一定是最优 ...

  8. [洛谷P3567][POI2014]KUR-Couriers

    题目大意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半.有,输出这个数,否则输出$0$ 题解:主席树,查询区间第$\bigg\lfloor\dfrac{len+1}{2}\bigg\rf ...

  9. 洛谷P3293 [SCOI2016]美味(主席树)

    传送门 据说这题做法叫做可持久化trie树?(然而我并不会) 首先考虑一下贪心,从高位到低位枚举,如果能选1肯定比选0优 假设已经处理到了$b$的第$i$位,为1(为0的话同理就不说了) 那么只有当$ ...

随机推荐

  1. Java8 Map的遍历方式

    在这篇文章中,我将对Map的遍历方式做一个对比和总结,将分别从JAVA8之前和JAVA8做一个遍历方式的对比,亲测可行. public class LambdaMap { private Map< ...

  2. Hibernate分页查询的两个方法

    Hibernate中HQL查询语句有一个分页查询, session.setMaxResult(参数)和session.setFirstResult(参数) 如果只设置session.setMaxRes ...

  3. SpringBoot中使用消息中间件Kafka实现Websocket的集群

    1.在实际项目中,由于数据量的增大及并发数的增多,我们不可能只用一台Websocket服务,这个时候就需要用到Webscoket的集群.但是Websocket集群会遇到一些问题.首先我们肯定会想到直接 ...

  4. python学习——sys.argv

    sys.argv[]:用于获取命令行参数,sys.argv[0]即所运行的代码自身的文件路径,因此真正的其他参数是从1开始 sys.argv[1]:表示第一个参数 sys.argv[1][2:]:表示 ...

  5. [leetcode]159. Longest Substring with At Most Two Distinct Characters至多包含两种字符的最长子串

    Given a string s , find the length of the longest substring t  that contains at most 2 distinct char ...

  6. 把html标签转换为实体 dhtmlspecialchars

    把html标签转换为实体/*可以处理数组中的代码,他们的作用是可以把一个数组或字符串中的字符转化为html实体,可以防止页面的跨站问题,那么我们看到他的转换就是将'&','"','& ...

  7. ContentProvider-------------自定义的内容提供者 然后去访问

    自定义提供者 import android.content.Context; import android.database.DatabaseErrorHandler; import android. ...

  8. Spring框架中Bean管理的常用注解

    1. @Component:组件.(作用在类上)可以作用在任何一个类上 2. Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的) * @Controller -- 作用在W ...

  9. winform弹出文件和目录选择框

    目录选择: FolderBrowserDialog dialog = new FolderBrowserDialog(); dialog.Description = "请选择文件路径&quo ...

  10. Linux gprof命令

    一.简介 gprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行时统计程序在用户态的执行信息,可以得到每个函数的调用次数,执行时间,调用关系等信息,简单易懂. ...