• luogu 3834 主席树模板


    pass

     1 #include <algorithm>
     2 #include <cstdio>
     3 using namespace std;
     4 const int MAXN = 210000;
     5 int n,m,tot,cnt;
     6 int vec[MAXN],num[MAXN],hsh[MAXN];
     7 int ls[40 * MAXN],rs[40 * MAXN],sum[40 * MAXN],root[MAXN];
     8 int find(int x)
     9 {
    10     int l = 1,r = tot;
    11     while (l <= r)
    12     {
    13         int mid = l + r >> 1;
    14         if (hsh[mid] < x)
    15             l = mid + 1;
    16         else
    17             r = mid - 1; 
    18     }
    19     return l;
    20 } 
    21 void insert(int l,int r,int pre,int &k,int v)
    22 {
    23     k = ++cnt;
    24     sum[k] = sum[pre] + 1;
    25     if (l == r)
    26         return;
    27     int mid = l + r >> 1;
    28     if (v <= mid)
    29     {
    30         rs[k] = rs[pre];
    31         insert(l,mid,ls[pre],ls[k],v);
    32     }
    33     else
    34     {
    35         ls[k] = ls[pre];
    36         insert(mid + 1,r,rs[pre],rs[k],v);
    37     }
    38 }
    39 int ask(int l,int r,int k,int x,int y)
    40 {
    41     if (l == r)
    42         return l;
    43     int mid = l + r >> 1;
    44     if (sum[ls[y]] - sum[ls[x]] >= k)
    45         return ask(l,mid,k,ls[x],ls[y]);
    46     else
    47         return ask(mid + 1,r,k - (sum[ls[y]] - sum[ls[x]]),rs[x],rs[y]);
    48 }
    49 int main()
    50 {
    51     scanf("%d%d",&n,&m);
    52     for (int i = 1;i <= n;i++)
    53     {
    54         scanf("%d",&vec[i]);
    55         num[i] = vec[i];
    56     }
    57     sort(num + 1,num + 1 + n);
    58     hsh[++tot] = num[1];
    59     for (int i = 2;i <= n;i++)
    60         if (num[i] != num[i - 1])
    61             hsh[++tot] = num[i];
    62     for (int i = 1;i <= n;i++)
    63         insert(1,tot,root[i - 1],root[i],find(vec[i]));
    64     int ta,tb,tk;
    65     for (int i = 1;i <= m;i++)
    66     {
    67         scanf("%d%d%d",&ta,&tb,&tk);
    68         printf("%d
    ",hsh[ask(1,tot,tk,root[ta - 1],root[tb])]); 
    69     }
    70 }
  • 相关阅读:
    常见的块级元素和行级元素
    CentOS 利用 yum 安装卸载软件常用命令
    MySQL 派生表(Derived Table) Merge Optimization
    MySQL中的两种临时表
    集中化管理平台 — Ansible 详解
    MySQL 错误码对照
    mysqldump 工具使用详解——参数选项
    git 命令参考手册
    XtraBackup 备份与恢复实例讲解
    XtraBackup 原理与安装
  • 原文地址:https://www.cnblogs.com/iat14/p/12316906.html
Copyright © 2020-2023  润新知