标签:std stream each which structure com absolute hint namespace
7 3 1 5 2 6 3 7 4 2 5 3 4 4 1 1 7 3
5 6 3
主席树模版题
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; inline int read(){ int x=0,c=getchar(),f=1; for(;c<48||c>57;c=getchar()) if(!(c^45)) f=-1; for(;c>47&&c<58;c=getchar()) x=(x<<1)+(x<<3)+c-48; return x*f; } int n,q,sz,tot,ls[8000001],rs[8000001],s[8000001],a[100001],root[100001],num[100001],hsh[100001]; inline int bin(int x){ int l=1,r=tot,mid; for(;l<=r;){ mid=l+r>>1; if(hsh[mid]<x) l=mid+1; else r=mid-1; } return l; } void ins(int l,int r,int x,int &y,int v){ y=++sz; s[y]=s[x]+1; if(!(l^r)) return; ls[y]=ls[x]; rs[y]=rs[x]; int mid=l+r>>1; if(v<=mid) ins(l,mid,ls[x],ls[y],v); else ins(mid+1,r,rs[x],rs[y],v); } int req(int l,int r,int x,int y,int k){ if(!(l^r)) return l; int mid=l+r>>1; if(k<=s[ls[y]]-s[ls[x]]) return req(l,mid,ls[x],ls[y],k); else return req(mid+1,r,rs[x],rs[y],k-s[ls[y]]+s[ls[x]]); } int main(){ n=read(),q=read(); for(int i=1;i<=n;i++) num[i]=a[i]=read(); sort(num+1,num+1+n); hsh[++tot]=num[1]; for(int i=2;i<=n;i++) if(num[i]^num[i-1]) hsh[++tot]=num[i]; for(int i=1;i<=n;i++) ins(1,tot,root[i-1],root[i],bin(a[i])); while(q--){ int x=read(),y=read(),k=read(); printf("%d\n",hsh[req(1,tot,root[x-1],root[y],k)]); } return 0; }
标签:std stream each which structure com absolute hint namespace
原文地址:http://www.cnblogs.com/keshuqi/p/6194663.html