【BZOJ】3524: [Poi2014]Couriers
2024-08-24 10:33:00
【算法】主席树
【题解】例题,记录和,数字出现超过一半就递归查找。
主席树见【算法】数据结构
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cctype>
using namespace std;
int read()
{
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
const int maxn=;
struct tree{int l,r,sum;}t[maxn*];
int n,m,sz,root[maxn]; void insert(int L,int R,int x,int &y,int v){
y=++sz;
t[y]=t[x];t[y].sum++;
if(L==R)return;
int mid=(L+R)>>;
if(v<=mid)insert(L,mid,t[x].l,t[y].l,v);
else insert(mid+,R,t[x].r,t[y].r,v);
}
int ask(int L,int R,int x,int y,int v){
if(L==R)return L;
else{
int mid=(L+R)>>;
if(v<t[t[y].l].sum-t[t[x].l].sum)return ask(L,mid,t[x].l,t[y].l,v);else
if(v<t[t[y].r].sum-t[t[x].r].sum)return ask(mid+,R,t[x].r,t[y].r,v);else
return ;
}
}
int main(){
scanf("%d%d",&n,&m);
int u;
for(int i=;i<=n;i++){
u=read();
insert(,n,root[i-],root[i],u);
}
int v;
for(int i=;i<=m;i++){
u=read();v=read();
printf("%d\n",ask(,n,root[u-],root[v],(v-u+)>>));
}
return ;
}
最新文章
- Office web app server2013详细的安装和部署
- SharePoint Error:a system restart from a previous installation or update is pending
- ODI 12.1.3创建standalone代理
- 03day2
- css3过度和动画
- jps(JVM Process Status)
- C#中数据源绑定DataSource以及相关控件(DataGridView)的使用总结
- 理解Ajax
- Laravel的console使用方法
- springboot实现简单的文件上传
- windows----------telnet不是内部命令问题
- WCF基础二
- MyBatis源码解析(十)——Type类型模块之类型处理器TypeHandler
- Confluence 6 数据库整合的限制
- 《剑指offer》 数值的整数次方
- Quartz定时器+Spring + @Autowired注入 空指针异常
- 200. Orchard学习 目录
- mybatis-spring集成:配置多数据库源中遇到的问题
- Python 模块之shutil模块
- java写简单Excel 首行是目录 然后前台下载
热门文章
- Windows Forms编程实战学习:第一章 初识Windows Forms
- BIND的安装配置
- 《构建之法》第6~7章读后感和对Scrum的理解
- 第四周PSP &;进度条
- 对小组项目alpha发布的评价
- [ Selenium2 从零开始 by Bruce from http://seleniumcn.cn ] 1-8 视频集锦
- Ubuntu 下升级 php
- PHP 操作redis 详细讲解 转的 http://www.cnblogs.com/jackluo/p/3412670.html
- 对ViewModel自定义约束
- MySQL5.7 初使用