Code:

#include<bits/stdc++.h>
#define lson ls[x]
#define mid ((l+r)>>1)
#define rson rs[x]
#define maxn 300003
#define inf 1000000001
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int cnt;
int ls[maxn*20], rs[maxn*20], sumv[maxn*20], root[maxn];
void build(int &x,int l,int r)
{
x=++cnt;
if(l==r)return;
if(mid>=l) build(lson, l,mid);
if(r>mid) build(rson,mid+1,r);
}
int update(int x,int l,int r,int k,int delta)
{
int oo=++cnt;
ls[oo]=ls[x], rs[oo]=rs[x], sumv[oo]=sumv[x]+delta;
if(l==r) return oo;
if(k<=mid) ls[oo]=update(lson,l,mid,k,delta);
else rs[oo]=update(rson,mid+1,r,k,delta);
return oo;
}
int query(int u,int v,int l,int r,int L,int R)
{
if(l>=L&&r<=R) return sumv[v]-sumv[u];
int tmp=0;
if(L<=mid) tmp+=query(ls[u],ls[v],l,mid,L,R);
if(R>mid) tmp+=query(rs[u],rs[v],mid+1,r,L,R);
return tmp;
}
int main()
{
// setIO("input");
int n,q,i,a,l,r;
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d",&a);
root[i]=update(root[i-1],1,inf,a,a);
}
scanf("%d",&q);
while(q--)
{
scanf("%d%d",&l,&r);
int mx=0,pos=0,sum;
while(1)
{
sum=query(root[l-1],root[r],1,inf,mx+1,pos+1);
if(sum<=0) break;
mx=pos+1, pos+=sum;
}
printf("%d\n",pos+1);
}
return 0;
}

  

最新文章

  1. #研发解决方案介绍#IdCenter(内部统一认证系统)
  2. 安装thrift
  3. Ajax异步刷新地址栏url改变(利用Html5 history.pushState实现)
  4. SU susort命令学习
  5. JavaScript 之垃圾回收和内存管理
  6. 64位系统安装ODBC驱动的方法
  7. springmvc+json
  8. 高效率使用google
  9. 网络直播电视之M3U8解析篇 (下)
  10. iis 回收工作进程时出错的解决办法
  11. U3D学习使用笔记(三)
  12. Hadoop入门进阶步步高(六)-Hadoop1.x与Hadoop2的差别
  13. http层负载均衡之haproxy
  14. Struts 框架 之 Hello World
  15. POJ3155 Hard Life [最大密度子图]
  16. 将表格添加到Word文档中 ,包括表格样式设置
  17. [jzoj]1729.blockenemy
  18. python模块之HTMLParser(原理很大程度上就是对类构造的熟练运用)
  19. hdu-5465-二维BIT+nim
  20. 修改XML的节点内容

热门文章

  1. Delphi XE2 之 FireMonkey 入门(21) - 和 FMX 相关的类(表)
  2. GMSSL在Window下的编译
  3. C++笔记(4)——引用及结构体
  4. java _static 关键字
  5. Mysql 数据库存储的原理??
  6. Django重点之url别名
  7. 洛咕 【P1891】疯狂LCM &amp; 三倍经验
  8. Feign负载均衡
  9. MongoDB的使用学习之(三)安装MongoDB以及一些基础操作
  10. AI-sklearn 学习笔记(二)数据集