UVa 1513 Movie collection (树状数组)
来源:互联网 发布:全民神将翅膀进阶数据 编辑:程序博客网 时间:2024/05/23 11:27
题目链接:http://acm.hust.edu.cn/vjudge/problem/36169
题意:有n个数按1,2...,n从上到下排列,每次选择一个数,输出这个数上面有几个数,选择后的数放在最顶端。
思路:
在这个题中,每个数都有自己的位置,我们让位置编号从上到下依次递减,用数组C[i]表示第i个位置有几个数(只能是0或1),那么sum(i)就表示第1到第i个位置一共有几个数,即i以及它的下面一共有几个数,用n减去sum(i)即为答案。
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<vector>#include<algorithm>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define lc rt<<1#define rc rt<<1|1using namespace std;typedef long long ll;const int maxn = 200000 + 10;const int INF = 1e9 + 10;int pos[maxn],C[maxn];vector<int> ans;int m,n;int lowbit(int x){ return x & -x;}int sum(int x){ int cnt = 0; while(x > 0) { cnt += C[x]; x -= lowbit(x); } return cnt;}int add(int x, int p){ while(x < maxn) { C[x] += p; x += lowbit(x); }}int main(){ int T; scanf("%d",&T); while(T--) { memset(C, 0, sizeof C); ans.clear(); scanf("%d%d",&n,&m); for(int i = 1; i <= n; i++) { pos[i] = n-i+1; add(pos[i],1); } int cnt = n; while(m--) { int x; scanf("%d",&x); ans.push_back(n-sum(pos[x])); add(pos[x],-1); pos[x] = ++cnt; add(pos[x],1); } for(int i = 0; i < ans.size(); i++) { if (i) printf(" "); printf("%d",ans[i]); } printf("\n"); }}
0 0
- 【UVA】1513-Movie collection(树状数组)
- UVA 1513-Movie collection(树状数组)
- UVA 1513 - Movie collection(树状数组)
- UVa 1513 Movie collection (树状数组)
- UVA 1513 - Movie collection(树状数组)
- uva 1513 - Movie collection(树状数组)
- UVA 1513—— Movie collection(树状数组)
- UVa 1513 / UVALive 5902 Movie collection (树状数组)
- UVa 1513 / UVALive 5902 Movie collection (树状数组)
- Movie collection(2013.09.15)树状数组
- UVA1513 - Movie collection(树状数组)
- UVALive 5902 Movie collection(树状数组)
- uva 1513 - Movie collection--树状数组--预留前n个位置
- uva 1513 - Movie collection
- UVa:1513 Movie collection
- Uva-1513-Movie collection
- UVa-1513-Movie collection
- UVA 1513 Movie collection
- android6.0 Activity(二) View创建过程
- static 静态变量生命周期
- Rand Over
- Java开发中的23种设计模式详解
- mysql 查询null
- UVa 1513 Movie collection (树状数组)
- 蓝桥杯 颠倒的价牌(暴力)
- 利用FTP,实现Linux与windows文件互传
- lintcode-删除排序链表中的重复数字 II
- 几种不同的diff格式
- Android开机自启动App(附带源码)
- SSH案例----员工管理系统之开发总结
- Android的死机、重启问题分析方法
- 《深入理解计算机系统》阅读笔记三——位运算 逻辑运算 移位运算