Luogu-3834 (主席树模板)

来源:互联网 发布:云计算行业分析 编辑:程序博客网 时间:2024/05/16 23:44

代码

//就是一个主席树#include <cstdio>#include <cstring>#define Max 1000000000#define Mid (l+r>>1)#define D(x) (T[T[x2].x].v-T[T[x1].x].v)using namespace std;struct node{    int l,r,v;}T[15000000];int k,n,m,s,t,num,Q,o,st[2000005];void add(int &x1,int x2,int l,int r){    x1=++num;   //x1肯定是一个之前没出现过的点,所以给他分配一个 node     T[x1]=T[x2];    T[x1].v++;    if (l==r) return;    if (l<=o && o<=Mid) {add(T[x1].l,T[x2].l,l,Mid); return;}    add(T[x1].r,T[x2].r,Mid+1,r);}int que(int x1,int x2,int l,int r,int O){    if (l==r) return l;    if (D(l)+O<k) return que(T[x1].r,T[x2].r,Mid+1,r,D(l)+O);    return que(T[x1].l,T[x2].l,l,Mid,O);}int main(){    freopen("1.txt","r",stdin);    scanf("%d%d",&n,&m);    for (int i=1; i<=n; i++){        scanf("%d",&o);        add(st[i],st[i-1],-Max,Max);    }    while (m--){        scanf("%d%d%d",&s,&t,&k);        printf("%d\n",que(st[s-1],st[t],-Max,Max,0));    }}
原创粉丝点击