题意

给定长度为\(n\)的序列\(a\),以及m个询问\(<k,pos>\),每次询问满足下列条件的子序列中第\(pos\)位的值为多少。

  • 子序列长度为\(k\)
  • 序列和是所有长度为\(k\)的子序列中最大的
  • 字典序是所有满足上述两个条件的序列中最小的

解题思路

稍作分析即可得出,将序列按值的大小作为第一关键字(升序),下标作为第二关键字(降序)排序,所得序列的后\(k\)个元素即为询问长度为\(k\)时满足给定条件的序列中的元素,所以答案就是后\(k\)个元素中下标第\(pos\)小的元素的值,用主席树维护即可。

AC代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+5; int n,m,t[maxn];
struct node{
int v,id;
bool operator<(const node& nd){
if(v==nd.v)return id>nd.id;
return v<nd.v;
}
}a[maxn]; int T[maxn],tot;
int sum[maxn<<5],L[maxn<<5],R[maxn<<5];
int update(int rt,int l,int r,int p){
int nrt=++tot;
L[nrt]=L[rt]; R[nrt]=R[rt]; sum[nrt]=sum[rt]+1;
if(l!=r){
int mid=(l+r)>>1;
if(p<=mid)L[nrt]=update(L[rt],l,mid,p);
else R[nrt]=update(R[rt],mid+1,r,p);
}
return nrt;
} int query(int u,int v,int l,int r,int k){
if(l==r)return l;
int cnt=sum[L[v]]-sum[L[u]];
int mid=(l+r)>>1;
if(k<=cnt)return query(L[u],L[v],l,mid,k);
else return query(R[u],R[v],mid+1,r,k-cnt);
} int main()
{
// freopen("in.txt","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i].v);
a[i].id=i; t[i]=a[i].v;
}
sort(a+1,a+1+n); for(int i=1;i<=n;i++)T[i]=update(T[i-1],1,n,a[i].id);
int k,pos;
scanf("%d",&m);
while(m--){
scanf("%d %d",&k,&pos);
printf("%d\n",t[query(T[n-k],T[n],1,n,pos)]);
}
return 0;
}

最新文章

  1. SQL查询数据的几大方法
  2. 第35讲:List的map、flatMap、foreach、filter操作代码实战
  3. jQuery中.parent和.parents的区别
  4. android 网络_网络源码查看器
  5. 【转】shell 教程——06 Shell变量:Shell变量的定义、删除变量、只读变量、变量类型
  6. RESTful 架构风格概述
  7. BZOJ 2298 problem a(区间DP)
  8. Main方法的执行过程(转)
  9. 筛选实现C++实现筛选法
  10. WeQuant交易策略—简单均线
  11. 偶遇vue-awesome-swiper的坑
  12. Python3 sys.argv[ ]的用法解释
  13. mysql安装完启动问题解决
  14. Java 枚举类 详解
  15. 数据库实例: STOREBOOK &gt; 表空间 &gt; 编辑 表空间: TEMP
  16. 基于Mongodb进行分布式数据存储
  17. python中super的使用
  18. FTRL 使用tensorflow的实现
  19. CentOS部署NetCore - 1. 安装CentOS 7 &amp; 安装 Nginx
  20. NodeJs03 express框架 Todo商城

热门文章

  1. c++中包含string成员的结构体拷贝导致的double free问题
  2. JS中escape()、encodeURI()、encodeURIComponent()区别详解
  3. 重温这几个屌爆的Python技巧!
  4. Linux命令持续学习
  5. 7、Java 循环结构
  6. C#LeetCode刷题之#205-同构字符串(Isomorphic Strings)
  7. three.js 制作机房(上)
  8. Linux expect用法介绍
  9. day8 文件
  10. Qt信号与槽使用方法最完整总结