zoukankan      html  css  js  c++  java
  • P3834 【模板】主席树

     

    题目地址


    注意点:

    • MAXN可开到1e7.

    #include<cstdio>
    #include<iostream>
    using namespace std;
    const int MAXN=1e7,INF=2e9;
    struct Node{
    	int ls,rs;
    	int cnt;
    }tr[MAXN];
    int nodeCnt=0;
    void insert(int p,int &q,int l,int r,int val){
    	if(!q)q=++nodeCnt;
    	if(l==r){
    		tr[q].cnt=tr[p].cnt+1;
    		return;
    	}
    	int mid=(l+r)>>1;
    	if(val<=mid){
    		tr[q].rs=tr[p].rs;
    		insert(tr[p].ls,tr[q].ls,l,mid,val);
    	}else{
    		tr[q].ls=tr[p].ls;
    		insert(tr[p].rs,tr[q].rs,mid+1,r,val);
    	}
    	tr[q].cnt=tr[tr[q].ls].cnt+tr[tr[q].rs].cnt;
    }
    int query(int p,int q,int l,int r,int k){
    	if(l==r)return l;
    	int lsum=tr[tr[q].ls].cnt-tr[tr[p].ls].cnt;
    	int mid=(l+r)>>1;
    	if(k<=lsum)return query(tr[p].ls,tr[q].ls,l,mid,k);
    	else return query(tr[p].rs,tr[q].rs,mid+1,r,k-lsum);
    }
    int root[MAXN];
    int main(){
    	int n,m;
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++){
    		int tmp;
    		scanf("%d",&tmp);
    		insert(root[i-1],root[i],-INF,INF,tmp);
    	}
    	for(int i=1;i<=m;i++){
    		int l,r,k;
    		scanf("%d%d%d",&l,&r,&k);
    		printf("%d
    ",query(root[l-1],root[r],-INF,INF,k));
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    动态网页技术--JSP(5)
    动态网页技术--JSP(4)
    动态网页技术--JSP(3)
    动态网页技术--JSP(2)
    动态网页技术--JSP(1)
    动态网页技术--Servlet
    TomCat服务器搭建
    06_多线程
    05_进程间通信 IPC
    04_进程池
  • 原文地址:https://www.cnblogs.com/zbsy-wwx/p/11746889.html
Copyright © 2011-2022 走看看