zoukankan      html  css  js  c++  java
  • POJ 2182 Lost Cows

    树状数组 + 倍增

    动态维护第k大
    注意倍增是 < x ,不能等于防止重复
    本题从后往前扫,维护一个 01 序列,对于已经确定的排名,将他变成 0 即变成了维护第 k 大的数
    用倍增结合了树状数组相当好的性质

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    const int MAXN = 100005;
    int n, c[MAXN], lg[MAXN], po[MAXN], sum, ans, num[MAXN], t[MAXN];
    int lowbit(const int &x) {
    	return x & -x;
    }
    void add(int x, int y) {
    	for( ; x <= n; x += lowbit(x)) c[x] += y;
    }
    int query(int x) {
    	sum = ans = 0;
    	for(int i = lg[n]; i >= 0; i--) {
    		if(ans + po[i] <= n && sum + c[ans + po[i]] < x) ans += po[i], sum += c[ans];
    	}
    	return ans + 1;
    }
    int main() {
    	cin >> n;
    	lg[2] = 1;
    	for(int i = 3;i <= 2 * n; i++) lg[i] = lg[i >> 1] + 1;
    	po[0] = 1;
    	for(int i = 1; i <= 16; i++) po[i] = 1 << i;
    	t[1] = 0;
    	for(int i = 2; i <= n; i++) {
    		cin >> t[i];
    	} 
    	for(int i = 1; i <= n; i++) add(i, 1);
    	for(int i = n; i >= 1; i--) {
    		num[i] = query(t[i] + 1);
    		add(num[i], -1);
    	}
    	for(int i = 1; i <= n; i++) cout << num[i] << endl;
    	return 0;
    }
    
  • 相关阅读:
    7.Flask-上传文件和访问上传的文件
    Python 数字模块
    Django之模板语法
    decimal模块
    python中的计时器:timeit模块
    6.Flask-WTForms
    Django之ORM跨表操作
    公司 邮件 翻译 培训 长难句 16
    公司 邮件 翻译 培训 长难句 15
    公司 邮件 翻译 培训 长难句 14
  • 原文地址:https://www.cnblogs.com/Mr-WolframsMgcBox/p/8612530.html
Copyright © 2011-2022 走看看