hdu 4217 Data Structure?(树状数组)
来源:互联网 发布:centos系统备份与恢复 编辑:程序博客网 时间:2024/05/06 19:12
题目链接:hdu 4217 Data Structure?
题目大意:给出n和m,表示有n个数1~n,然后每次从这个集合中挑选出第ki个小的(m次),问说挑选出来的数字的和。
解题思路:树状数组,v记录的即为其区间上有多少个数未选取,进行取操作的时候只要找到第x个,使得前面的和刚好是ki即可。
#include <stdio.h>#include <string.h>#include <iostream>using namespace std;const int N = 270000;typedef long long ll;int n, m;ll v[N];void add(int x, int val) {while (x <= n) {v[x] += val;x += (x & (-x));}}void init() {scanf("%d%d", &n, &m);memset(v, 0, sizeof(v));for (int i = 1; i <= n; i++) add(i, 1);}int sum(int k) {int x = 0, s = 0;for (int i = 18; i >= 0; i--) {if (x + (1<<i) < n && s + v[x+ (1<<i)] < k) {x += (1<<i);s += v[x];}}return x+1;}ll solve() {int k;ll ans = 0;for (int i = 0; i < m; i++) {scanf("%d", &k);int s = sum(k);ans += s;add(s, -1);}return ans;}int main() {int cas;scanf("%d", &cas);for (int i = 1; i <= cas; i++) {init();cout << "Case " << i <<": " << solve() << endl;}return 0;}
1 0
- hdu 4217 Data Structure?(树状数组)
- HDU 4217 Data Structure? 树状数组
- Hdu 4217 Data Structure?【二分+树状数组】
- HDU 4217 Data Structure? 线段树 OR 树状数组
- 【Data Structure】树状数组
- HDU 4217 Data Structure?(树状数组求前k大)
- HDU 4217 Data Structure?(线段树 or 树状数组啊)
- hdu-4217Data Structure?
- hdu 4217 Data Structure?
- HDU 4217 Data Structure?
- hdu 4217Data Structure?
- hdu 4217 Data Structure? treap
- hdu 4217 Data Structure?/SBT
- hdu 题目4217 Data Structure?(线段树,单点更新)
- HDU 4217 Data Structure?(线段树)
- HDU--4217 -- Data Structure? [线段树]
- hdu-4217-Data Structure? 线段树
- hdu 2817 Data Structure? (线段树)
- 非阻塞SOCKET
- socket阻塞和非阻塞的区别
- 四级写作之问题类文章
- IO - 同步,异步,阻塞,非阻塞
- 同步与异步--阻塞与非阻塞型I/O(非常好,转贴)
- hdu 4217 Data Structure?(树状数组)
- UVa 424 - Integer Inquiry解题报告
- 同步、异步、阻塞和非阻塞的概念
- SPOJ NGM
- eclipse控制台不显示打印信息的处理方法
- Uniform Generator
- 数学问题1:n排列的第k个数
- C#连接MYSQL的两种方法
- windows文件的常规读写