zoukankan      html  css  js  c++  java
  • Codeforces 1262D Optimal Subsequences(BIT+二分)

    首先比较容易想到肯定是前k大的元素,那么我们可以先对其进行sort,如果数值一样返回下标小的(见题意),接下里处理的时候我们发现需要将一个元素下标插入到有序序列并且需要访问第几个元素是什么,那么我们可以离线处理,将所有询问存起来,每次插入一个元素的时候在对其进行查询,那么现在就变成了离线求第k大,那么可以直接上主席数,当然比较懒的做法就直接树状数组维护下标,二分查找答案。

     1 //      ——By DD_BOND 
     2  
     3 #include<bits/stdc++.h>
     4  
     5 #define fi first
     6 #define se second
     7 #define pb push_back
     8 #define lowbit(a)  (a&(-a))
     9  
    10 using namespace std;
    11  
    12 typedef long long ll;
    13 typedef pair<int,int> P;
    14  
    15 const int MAXN=1e6+10;
    16  
    17 P a[MAXN];
    18 vector<P>q[MAXN];
    19 int b[MAXN],bit[MAXN],ans[MAXN];
    20  
    21 bool cmp(P x,P y){
    22     if(x.fi==y.fi)  return x.se<y.se;
    23     return x.fi>y.fi;
    24 }
    25  
    26 void add(int p,int n){
    27     for(int i=p;i<=n;i+=lowbit(i))  bit[i]++;
    28 }
    29  
    30 int query(int p){
    31     int sum=0;
    32     for(int i=p;i>=1;i-=lowbit(i))  sum+=bit[i];
    33     return sum;
    34 }
    35  
    36 int main(void)
    37 {
    38     ios::sync_with_stdio(false);    cin.tie(0);   cout.tie(0);   
    39     int n;  cin>>n;
    40     for(int i=1;i<=n;i++)    cin>>a[i].fi,a[i].se=i,b[i]=a[i].fi;
    41     int m;  cin>>m;
    42     for(int i=1;i<=m;i++){
    43         int k,p;    cin>>k>>p;
    44         q[k].pb(P(p,i));
    45     }
    46     sort(a+1,a+n+1,cmp);
    47     for(int i=1;i<=n;i++){
    48         add(a[i].se,n);
    49         for(int j=0;j<(int)q[i].size();j++){
    50             P p=q[i][j];
    51             int l=1,r=n,res=0;
    52             while(l<=r){
    53                 int mid=(l+r)>>1;
    54                 if(query(mid)>=p.fi)    res=mid,r=mid-1;
    55                 else    l=mid+1;
    56             }
    57             ans[p.se]=res;
    58         }
    59     }
    60     for(int i=1;i<=m;i++)    cout<<b[ans[i]]<<endl;
    61     return 0;
    62 }
  • 相关阅读:
    python项目---数据可视化(02)
    python项目---数据可视化(01)
    sort 快排解决百万级的排序
    插入排序专题 直接插入 折半 希尔shell
    人见人爱A^B
    内部收益率
    台球碰撞
    杭电 1061 Rightmost Digit计算N^N次方的最后一位
    数字整除
    循环 未理解
  • 原文地址:https://www.cnblogs.com/dd-bond/p/11934496.html
Copyright © 2011-2022 走看看