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

    //贴个主席树板子
    #include<bits/stdc++.h> using namespace std; #define pb push_back #define sc(x) scanf("%lld",&x); #define int long long #define fi first #define se second #define endl ' ' #define P pair<int,int> int cnt; struct Node{ int l,r,sum; }; const int maxn = 2e5+5; Node A[maxn*40]; int a[maxn]; int root[maxn]; vector<int> v; void insert(int x,int l,int r,int pre,int &cur) { A[++cnt] = A[pre]; cur = cnt; A[cur].sum++; if(l==r){ return; } int m = (l+r)>>1; if(x <= m)insert(x,l,m,A[pre].l,A[cur].l); else insert(x,m+1,r,A[pre].r,A[cur].r); } int query(int l,int r,int L,int R,int k) { if(l==r){ return l; } int m = (l+r)>>1; int tmp = A[A[R].l].sum-A[A[L].l].sum; if(tmp>=k){ return query(l,m,A[L].l,A[R].l,k); }else return query(m+1,r,A[L].r,A[R].r,k-tmp); } signed main() { int n,m; sc(n)sc(m) for(int i =0 ;i < n;i++){ sc(a[i]) v.pb(a[i]); } sort(v.begin(),v.end()); int z = unique(v.begin(),v.end())-v.begin(); for(int i=0;i<n;i++){ int id = lower_bound(v.begin(),v.begin()+z,a[i])-v.begin()+1; insert(id,1,n,root[i],root[i+1]); } int l,r,k; for(int i=0;i<m;i++){ sc(l)sc(r)sc(k) //cout<<(query(1,n,root[l-1],root[r],k)-1)<<endl; cout<<v[query(1,n,root[l-1],root[r],k)-1]<<' '; } }
  • 相关阅读:
    hdu 1712(分组背包)
    hdu 3033(好题,分组背包)
    阶乘除法(很久之前的一道题,感觉挺好的,遂记录之)
    hdu 1559(最大子矩阵)
    hdu 1080(LCS变形)
    POJ 3458 Colour Sequence
    HUST 1599 Multiple
    HDU 3903 Trigonometric Function
    HUST 1605 Gene recombination
    UVA 11551 Experienced Endeavour
  • 原文地址:https://www.cnblogs.com/liulex/p/12945146.html
Copyright © 2011-2022 走看看