zoukankan      html  css  js  c++  java
  • K-th Number

    区间第K大

    题目链接

     1 #include <stdio.h>
     2 #include <algorithm>
     3 #include <vector>
     4 #include <iostream>
     5 using namespace std;
     6 typedef long long ll;
     7 inline int read()
     8 {
     9     int x=0,f=1;char ch=getchar();
    10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    11     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    12     return x*f;
    13 }
    14 
    15 /********************************************************************/
    16 
    17 const int maxn = 1e5+7;
    18 int n, m, cnt, root[maxn], a[maxn], x, y, k;
    19 
    20 struct node{
    21     int l, r, sum;
    22 }T[maxn*40];
    23 
    24 vector<int>v;
    25 int getid(int x){return lower_bound(v.begin(), v.end(), x) - v.begin() + 1;}    //离散化
    26         
    27 void update(int l, int r, int &x, int y, int pos){
    28     T[++cnt] = T[y], T[cnt].sum++, x = cnt;
    29     if(l == r) return ;
    30     int mid = (l+r)>>1;
    31     if(mid >= pos) update(l, mid, T[x].l, T[y].l, pos);
    32     else update(mid+1, r, T[x].r, T[y].r, pos);
    33 }
    34 
    35 int query(int l, int r, int x, int y, int k){
    36     if(l == r) return l;
    37     int mid = (l+r)>>1;
    38     int sum = T[T[y].l].sum - T[T[x].l].sum;
    39     if(sum >= k) return query(l, mid, T[x].l, T[y].l, k);
    40     else return query(mid+1, r, T[x].r, T[y].r, k-sum);
    41 }
    42 
    43 int main(){
    44     n = read(); m = read();
    45     for(int i = 1;i <= n;i++){
    46         a[i] = read();
    47         v.push_back(a[i]);
    48     }
    49     //离散化
    50     sort(v.begin(), v.end());
    51     v.erase(unique(v.begin(), v.end()), v.end());
    52     //unique 去重
    53     for(int i = 1;i <= n;i++) update(1, n, root[i], root[i-1], getid(a[i]));
    54     for(int i = 1;i <= m;i++){
    55         x = read(); y = read(); k = read();
    56         printf("%d
    ", v[query(1, n, root[x-1], root[y], k) - 1]);  //离散化回来
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    linux下淘宝安全控件问题
    什么样的路由器有类似改hosts的功能
    linux 常见音乐、视频播放器简介
    把Ubuntu打造成Mac Macbuntu
    Linux桌面“彩”起来:桌面环境及窗口管理器大盘点
    听听各位对Ubuntu的UI的看法
    KVM虚拟机的创建、管理与迁移
    轻量级桌面 openbox + tint2 + conky + stalonetray + pcmanfm + xcompmgr
    ubuntu设置自动关机
    ubuntu sublime 破解
  • 原文地址:https://www.cnblogs.com/ouyang_wsgwz/p/9697066.html
Copyright © 2011-2022 走看看