【算法】主席树

【题解】例题,记录和,数字出现超过一半就递归查找。

主席树见【算法】数据结构

#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 ;
}

最新文章

  1. Office web app server2013详细的安装和部署
  2. SharePoint Error:a system restart from a previous installation or update is pending
  3. ODI 12.1.3创建standalone代理
  4. 03day2
  5. css3过度和动画
  6. jps(JVM Process Status)
  7. C#中数据源绑定DataSource以及相关控件(DataGridView)的使用总结
  8. 理解Ajax
  9. Laravel的console使用方法
  10. springboot实现简单的文件上传
  11. windows----------telnet不是内部命令问题
  12. WCF基础二
  13. MyBatis源码解析(十)——Type类型模块之类型处理器TypeHandler
  14. Confluence 6 数据库整合的限制
  15. 《剑指offer》 数值的整数次方
  16. Quartz定时器+Spring + @Autowired注入 空指针异常
  17. 200. Orchard学习 目录
  18. mybatis-spring集成:配置多数据库源中遇到的问题
  19. Python 模块之shutil模块
  20. java写简单Excel 首行是目录 然后前台下载

热门文章

  1. Windows Forms编程实战学习:第一章 初识Windows Forms
  2. BIND的安装配置
  3. 《构建之法》第6~7章读后感和对Scrum的理解
  4. 第四周PSP &amp;进度条
  5. 对小组项目alpha发布的评价
  6. [ Selenium2 从零开始 by Bruce from http://seleniumcn.cn ] 1-8 视频集锦
  7. Ubuntu 下升级 php
  8. PHP 操作redis 详细讲解 转的 http://www.cnblogs.com/jackluo/p/3412670.html
  9. 对ViewModel自定义约束
  10. MySQL5.7 初使用