zoukankan      html  css  js  c++  java
  • [可持久化权值线段树] [模板] [数组版本]

    [可持久化权值线段树] [模板] [数组版本]

    [1 leq n leq 2e5\ |a_i| leq 1e9 ]

    感觉动态开点用指针好理解一点

    但是太难调试了,还是数组版本吧

    代码

    int a[maxn],b[maxn],len;
    
    inline int getid(int val){
    	return lower_bound(b + 1,b + len + 1,val) - b;
    }
    
    struct ZXS{
    	int cnt;
    	vector<int> sum,L,R,T;
    	ZXS(int n):cnt(0),sum(n * 40),L(n * 40),R(n * 40),T(n + 5) {}
    	
    	int build(int l,int r){
    		int rt = ++cnt;
    		sum[rt] = 0;
    		int mid = l + r >> 1;
    		if(l < r) {
    			L[rt] = build(l,mid);
    			R[rt] = build(mid + 1,r);
    		}
    		return rt;
    	}
    	
    	int update(int pre,int l,int r,int x){
    		int rt = ++cnt;
    		L[rt] = L[pre],R[rt] = R[pre];
    		sum[rt] = sum[pre] + 1;
    		int mid = l + r >> 1;
    		if(l < r) {
    			if(x <= mid) L[rt] = update(L[pre],l,mid,x);
    			else R[rt] = update(R[pre],mid + 1,r,x);
    		}
    		return rt;
    	}
    	int query(int lt,int rt,int l,int r,int k) {
    		if(l >= r) return l;
    		int x = sum[L[rt]] - sum[L[lt]];
    		int mid = l + r >> 1;
    		if(x >= k) return query(L[lt],L[rt],l,mid,k);
    		else return query(R[lt],R[rt],mid + 1,r,k - x);
    	}
    };
    
    int main(){
    	int n = rd();
    	int q = rd();
    	for(int i = 1;i <= n;i++) {
    		a[i] = rd();
    		b[i] = a[i];
    	}
    	sort(b + 1,b + n + 1);
    	len = unique(b + 1,b + n + 1) - (b + 1);
    	
    	ZXS seg(n);
    	seg.T[0] = seg.build(1,len);
    	for(int i = 1;i <= n;i++){
    		seg.T[i] = seg.update(seg.T[i - 1],1,len,getid(a[i]));
    	} 
    	while(q--){
    		int l = rd();
    		int r = rd();
    		int k = rd();
    		printf("%d
    ",b[seg.query(seg.T[l - 1],seg.T[r],1,len,k)]);
    	}
    }
    	
    
  • 相关阅读:
    Java mysql数据库连接Demo1
    java JDBC编程流程步骤
    spring boot定时任务
    mysql分页
    mysql limit 偏移量过大效率解决方式 转贴
    svn both sides of the move must be committed together
    An invalid property 'jdbcType ' was found in mapping
    JSON高亮格式化页面显示
    nprogress 转
    org.apache.commons工具类方法解释 转
  • 原文地址:https://www.cnblogs.com/hznumqf/p/14489715.html
Copyright © 2011-2022 走看看