题意:

给定一个序列,长度为n(<=2e5),有m(<=2e5)个询问,每个询问包含k和pos,要从原序列中选出一个长度为k的子序列,要求是这个序列的和是所有长度为k的序列中最大的,且是字典序最小的,要求输出子序列中第pos个元素。

思路:

显然要是长度为k的序列中和最大,必须要优先选大的数。显然必须全部选的数不需要考虑位置,部分选的数(必定是最小的数)肯定优先选择坐标小的,因此可以将所有数按数值从大到小排,然后坐标从小到达排,前k的数就是每次要选的数。而第pos个元素就是排好的数前k个中坐标值第pos小的,用主席树维护坐标值就好了。

#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
const int Log=40;
int num[maxn*Log],lson[maxn*Log],rson[maxn*Log];
int root[maxn];
int tot;
int build(int l,int r){
int pos=++tot;
if(l<r){
int mid=(l+r)>>1;
lson[pos]=build(l,mid);
rson[pos]=build(mid+1,r);
}
return pos;
}
int update(int rt,int l,int r,int p){
int pos=++tot;
num[pos]=num[rt]+1;
lson[pos]=lson[rt];
rson[pos]=rson[rt];
if(l<r){
int mid=(l+r)>>1;
if(p<=mid) lson[pos]=update(lson[rt],l,mid,p);
else rson[pos]=update(rson[rt],mid+1,r,p);
}
return pos;
}
int query(int Old,int New,int l,int r,int k){
if(l==r)return l;
int mid=(l+r)>>1;
int x=num[lson[New]]-num[lson[Old]];
if(x>=k) return query(lson[Old],lson[New],l,mid,k);
else return query(rson[Old],rson[New],mid+1,r,k-x);
}
struct node{
int v,pos;
}N[maxn];
bool cmp(node a,node b){
return a.v==b.v?a.pos<b.pos:a.v>b.v;
}
int a[maxn];
int main(){
int n,q;
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&N[i].v);
N[i].pos=i;
a[i]=N[i].v;
}
sort(N+1,N+1+n,cmp);
for(int i=1;i<=n;i++)
root[i]=update(root[i-1],1,n,N[i].pos);
root[0] = build(1, n);
cin>>q;
while(q--){
int k,pos;scanf("%d%d",&k,&pos);
int p=query(root[0],root[k],1,n,pos);
printf("%d\n",a[p]);
}
}

最新文章

  1. jQuery-1.9.1源码分析系列(十六)ajax——jsonp原理
  2. [MySQL Reference Manual] 18 复制
  3. React JS的基本用法[ES5,纯前端写法]
  4. C#测试题若干,都是基础阿
  5. 设定报表变量的CharSpacing
  6. JSON语法简介 介绍 json
  7. 在Windows下用gSoap实现简单加法实例
  8. Asp.net MVC 视图使用像Ajax,ViewBag提示为找到上下文
  9. PC版模块滚动不显示滚动条效果
  10. 在C#中winform程序中应用nlog日志工具
  11. js的学习(window对象的使用)
  12. java多线程中 volatile与synchronized的区别-阿里面试
  13. Python 常用系统模块整理
  14. vue实例属性之methods和computed
  15. 基于 HTML5 的工业组态高炉炼铁 3D 大屏可视化
  16. CentOS 7.0关闭默认防火墙启用iptables防火墙
  17. ArcGIS进行自定义投影转换(重投影)
  18. 201709015工作日记--上下文的理解,ASM
  19. pexpect 初坑
  20. iDempiere 使用指南 MRP/生产插件 LiberoMFG 源码安装

热门文章

  1. Python学习-第三天-面向对象编程基础
  2. [BZOJ2829] 信用卡 (凸包)
  3. HDU 6649 Data Structure Problem(凸包+平衡树)
  4. github提交用户权限被拒
  5. django信号相关
  6. grunt默认只允许localhost和访问,如何设置外部IP地址访问
  7. JDK 8 中Stream流中的去重的方法
  8. 前端开发JavaScript入门——JavaScript介绍&amp;基本数据类型
  9. Nodejs的模块化
  10. Git同步问题