主席树 模板题 luogu([POI2014]KUR-Couriers)
求区间内是否有个数大于二分之一的数,有的话输出这个数,没有的话输出0.
在询问的时候,如果左边有sum大于这个limit,就可以继续求,如果右边有sum大于limit 也递归,
如果都不行,返回 0;
#include<cstdio>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
const int maxn=5e5+;
int Root[maxn],cnt;
struct node
{
int ln,rn,sum;
}tree[maxn*];
void add(int &x,int y,int l,int r,int num)
{
tree[++cnt]=tree[y];tree[cnt].sum++;x=cnt;
if(l==r) return;
int mid=l+r>>;
if(num<=mid) add(tree[x].ln,tree[y].ln,l,mid,num);
else add(tree[x].rn,tree[y].rn,mid+,r,num);
}
int query(int x,int y,int l,int r,int limit)
{
if(l==r){
if(tree[x].sum-tree[y].sum>=limit) return l;
else return ;
}
int left1=tree[x].ln,left2=tree[y].ln;
int right1=tree[x].rn,right2=tree[y].rn;
int mid=l+r>>;
if(tree[left1].sum-tree[left2].sum>=limit){
return query(left1,left2,l,mid,limit);
}
else if(tree[right1].sum-tree[right2].sum>=limit){
return query(right1,right2,mid+,r,limit);
}
else return ;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
int tmp;
scanf("%d",&tmp);
add(Root[i],Root[i-],,n,tmp);
}
for(int i=;i<=m;i++){
int l,r;
scanf("%d%d",&l,&r);
int limit=(r-l+)/+;
printf("%d\n",query(Root[r],Root[l-],,n,limit));
}
return ;
}
主席树 模板题 luogu([POI2014]KUR-Couriers)的更多相关文章
- 【POJ 2104】 K-th Number 主席树模板题
达神主席树讲解传送门:http://blog.csdn.net/dad3zz/article/details/50638026 2016-02-23:真的是模板题诶,主席树模板水过.今天新校网不好,没 ...
- 主席树:POJ2104 K-th Number (主席树模板题)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 44952 Accepted: 14951 Ca ...
- poj2104 主席树模板题
题意 给出n个数字组成的数字序列,有m组询问.每次询问包含三个数字l,r,k.对于每个询问输出序列区间[l,r]中第k大的数字. 分析 这是主席树的模板题,套板子就可以 #include <cs ...
- 【BZOJ 1901】【Zju 2112】 Dynamic Rankings 动态K值 树状数组套主席树模板题
达神题解传送门:http://blog.csdn.net/dad3zz/article/details/50638360 说一下我对这个模板的理解: 看到这个方法很容易不知所措,因为动态K值需要套树状 ...
- SPOJ MKTHNUM & POJ 2104 - K-th Number - [主席树模板题]
题目链接:http://poj.org/problem?id=2104 Description You are working for Macrohard company in data struct ...
- POJ 2104 K-th Number(主席树模板题)
http://poj.org/problem?id=2104 题意:求区间$[l,r]$的第k小. 思路:主席树不好理解啊,简单叙述一下吧. 主席树就是由多棵线段树组成的,对于数组$a[1,2...n ...
- hdu2665(主席树模板题)
hdu2665 题意 求区间第 k 小. 分析 参考 这类题目做法挺多的,例如 划分树. 这里使用主席树再写一发,不得不说主席树相比而言要好写的多,比起普通线段树,主席树就是复用了线段树共有的信息. ...
- POJ 2104 主席树模板题
#include <iostream> #include <cstdio> #include <algorithm> int const maxn = 200010 ...
- POJ-2104-K-th Number(区间第K大+主席树模板题)
Description You are working for Macrohard company in data structures department. After failing your ...
随机推荐
- VSCode常用插件之Simple New File使用
更多VSCode插件使用请访问:VSCode常用插件汇总 Simple New File这是一个从命令面板简单创建新文件.文件夹.通过侧边栏创建新文件可能会很繁琐.该扩展旨在通过命令面板使创建文件或目 ...
- unrecognized import path "golang.org/x/*"的解决办法
由于国内网络原因,因此访问https://golang.org/网站会被限制.所以在go get下载其他第三方包的时候,如果这个第三方包又引用了https://golang.org/x/下的包,通常会 ...
- swagger文档使用
https://www.cnblogs.com/suizhikuo/p/9397417.html
- Wannafly Camp 2020 Day 2E 阔力梯的树 - set,启发式合并
搞一波启发式合并即可 #include <bits/stdc++.h> using namespace std; #define int long long #define iter se ...
- Java中8进制数和16进制数的表示方法
由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题. 但,二进制数太长了.比如int 类型占用4个字节,32位.比如100,用int类型的二进制数表达将 ...
- 你所不知道的Hello World[C++实现]
要说OIer界内最简单的程序,那恐怕非Hello World莫属了, 那么这篇文章就介绍如何写Hello World(被打). 最简单的一种实现: #include <iostream> ...
- 解决git速度太慢的问题,亲测有效
在家用的是电信网,每次git大型项目总是失败,甚是苦恼,解决了好几次都失败了,终忍受不了,下定决心干掉它. git clone特别慢是因为github.global.ssl.fastly.net域名被 ...
- Python 编辑注意点
文本编辑 Python: 绝对不能用Word和Windows自带的记事本. (1)Word保存的不是纯文本文件 (2)记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导 ...
- ReLU(inplace=True),这里的inplace=true的意思
ReLU(inplace=True),这里的inplace=true的意思 待办 inplace=True means that it will modify the input directly, ...
- Git分支基本命令+coding webhook+lnmp
首先介绍一写基本的git操作命令: 查看当前项目的远程地址: git remote -v 查看远程地址所有分支: git branch -a 或者 git branch -r 查看本地分支与远程分支的 ...