zoukankan      html  css  js  c++  java
  • 主席树板子

     1 #include <bits/stdc++.h>
     2 #define maxn 200010
     3 using namespace std;
     4 int ent,n,m,l,r,k;
     5 int L[maxn],R[maxn],sum[maxn];//×ó¶ù×Ó ÓÒ¶ù×Ó ½ÚµãÖµ
     6 int a[maxn],hash[maxn];//Ô­Êý×é ÀëÉ¢»¯ºóÊý×é
     7 int type[maxn];//ÀúÊ·°æ±¾¸ù½Úµã
     8 int built(int l,int r)
     9 {
    10     int num=++ent;
    11     if(l!=r)
    12     {
    13         int mid=l+((r-l)>>1);
    14     L[num]=built(l,mid);
    15     R[num]=built(mid+1,r);
    16     }
    17     return num;
    18 } 
    19 int update(int pre,int l,int r,int x)
    20 {
    21     int num=++ent;
    22     L[num]=L[pre];R[num]=R[pre];sum[num]=sum[pre]+1;
    23     if(l!=r)
    24 {
    25     int mid=(l+r)>>1;
    26     if(x<=mid)L[num]=update(L[pre],l,mid,x);
    27     else R[num]=update(R[pre],mid+1,r,x);
    28 }
    29     return num;
    30 }
    31 int question(int u,int v,int l,int r,int k)
    32 {
    33     if(l==r)return hash[l];
    34     int mid=l+((r-l)>>1);
    35     int num=sum[L[v]]-sum[L[u]];
    36     if(k<=num) return question(L[u],L[v],l,mid,k);
    37     else return question(R[u],R[v],mid+1,r,k-num);
    38 }
    39 int main()
    40 {
    41     cin>>n>>m;
    42     for(int i=1;i<=n;i++){cin>>a[i];hash[i]=a[i];}
    43     sort(hash+1,hash+1+n);
    44     int size=unique(hash+1,hash+1+n)-(hash+1);
    45     type[0]=built(1,size);
    46     for(int i=1;i<=n;i++)
    47     {
    48         int x=lower_bound(hash+1,hash+1+size,a[i])-hash;
    49         type[i]=update(type[i-1],1,size,x);
    50     }
    51     while(m--)
    52     {
    53         cin>>l>>r>>k;
    54         printf("%d
    ",question(type[l-1],type[r],1,size,k)); 
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    printf,wprintf与setlocale,char与wchar_t区别
    C++常量表达式、const、constexpr(C++11新增)的区别
    珍珠项链 Beads
    A Horrible Poem
    三个朋友
    Seek the Name, Seek the Fame
    Power Strings
    图书管理
    子串查找
    山峰和山谷 Ridges and Valleys
  • 原文地址:https://www.cnblogs.com/mjc191812/p/12252674.html
Copyright © 2011-2022 走看看