• [poj 2104] K-th Number【主席树】


    传送门:http://poj.org/problem?id=2104

    保存模版。

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    
    // Sora Sai Gou!!!
    
    const int maxn = 100005, maxm = 5005, maxv = 2000005, nil = maxv - 1;
    
    int n, m, a[maxn], b[maxn], siz[maxv], ch[maxv][2], root[maxv], cnt;
    int t1, t2, t3;
    
    inline int fndidx(int key) {
    	int left = 1, right = n, mid;
    	while (left < right) {
    		mid = (left + right) >> 1;
    		if (a[mid] < key) {
    			left = mid + 1;
    		}
    		else {
    			right = mid;
    		}
    	}
    	return left;
    }
    void ist(int & ima, int p, int key, int ql, int qr) {
    	if (!ima) {
    		ima = ++cnt;
    	}
    	siz[ima] = siz[p] + 1;
    	if (ql == qr) {
    		return;
    	}
    	int mid = (ql + qr) >> 1;
    	if (key <= mid) {
    		ch[ima][1] = ch[p][1];
    		ist(ch[ima][0], ch[p][0], key, ql, mid);
    	}
    	else {
    		ch[ima][0] = ch[p][0];
    		ist(ch[ima][1], ch[p][1], key, mid + 1, qr);
    	}
    }
    inline int qry (int l, int r, int kth) {
    	--l;
    	int left = 1, right = n, mid, p1 = root[l], p2 = root[r], tem;
    	while (left < right) {
    		tem = siz[ch[p2][0]] - siz[ch[p1][0]];
    		mid = (left + right) >> 1;
    		if (kth <= tem) {
    			p2 = ch[p2][0];
    			p1 = ch[p1][0];
    			right = mid;
    		}
    		else {
    			kth -= tem;
    			p2 = ch[p2][1];
    			p1 = ch[p1][1];
    			left = mid + 1;
    		}
    	}
    	return a[left];
    }
    
    int main(void) {
    	//freopen("in.txt", "r", stdin);
    	scanf("%d%d", &n, &m);
    	for (int i = 1; i <= n; ++i) {
    		scanf("%d", a + i);
    	}
    	memcpy(b, a, sizeof b);
    	std::sort(a + 1, a + n + 1);
    	for (int i = 1; i <= n; ++i) {
    		b[i] = fndidx(b[i]);
    	}
    	
    	for (int i = 1; i <= n; ++i) {
    		ist(root[i], root[i - 1], b[i], 1, n);
    	}
    	for (int i = 0; i < m; ++i) {
    		scanf("%d%d%d", &t1, &t2, &t3);
    		printf("%d
    ", qry(t1, t2, t3));
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    组合数据类型练习
    实验四、递归下降语法分析实验
    词法分析实验报告
    Python基础综合练习
    大数据概述
    一个词法分析程序
    linux基本命令
    有限自动机的构造与识别
    我对编译原理的小小了解
    Scrum 冲刺博客 2
  • 原文地址:https://www.cnblogs.com/ciao-sora/p/6780205.html
Copyright © 2020-2023  润新知