poj 3784 Running Median/sbt
来源:互联网 发布:没有c基础可以学java吗 编辑:程序博客网 时间:2024/05/21 18:32
原题链接:http://poj.org/problem?id=3784
动态地求中位数,套平衡树做就行了。。。
代码如下:
#include<iostream>#include<algorithm>const int Max_N = 10000;struct SBT *null;struct SBT{int val, size;struct SBT *ch[2];inline void push_up(){size = ch[0]->size + ch[1]->size + 1;}}stack[Max_N << 2], *root;int sz = 0;void init(){null = &stack[sz++];null->val = -1, null->size = 0;root = null;}void rotate(SBT* &x, int d){SBT *k = x->ch[!d];x->ch[!d] = k->ch[d];k->ch[d] = x;k->size = x->size;x->push_up();x = k;}void Maintain(SBT* &x, int d){if (x->ch[d] == null) return;if (x->ch[d]->ch[d]->size > x->ch[!d]->size){rotate(x, !d);} else if (x->ch[d]->ch[!d]->size > x->ch[!d]->size){rotate(x->ch[d], d), rotate(x, !d);} else{return;}Maintain(x, 0), Maintain(x, 1);}void insert(SBT* &x, int val){if (x == null){x = &stack[sz++];x->val = val, x->size = 1;x->ch[0] = x->ch[1] = null;} else {int d = val > x->val;insert(x->ch[d], val);x->push_up();Maintain(x, d);}}int find_kth(SBT *x, int k){int t = 0;for (; x != null;){t = x->ch[0]->size;if (k == t + 1) break;else if (k <= t) x = x->ch[0];else k -= t + 1, x = x->ch[1];}return x->val;}int main(){#ifdef LOCALfreopen("in.txt", "r", stdin);freopen("out.txt", "w+", stdout);#endifinit();int i, t, n, q, val, cnt;scanf("%d", &t);while (t--){sz = cnt = 0;init();scanf("%d %d", &q, &n);printf("%d %d\n", q, (n + 1) >> 1);for (i = 1; i <= n; i++){scanf("%d", &val);insert(root, val);if (i % 2 != 0){printf("%d ", find_kth(root, ((root->size) >> 1) + 1));cnt++;}if (cnt && cnt % 10 == 0) cnt = 0, printf("\n");}printf("\n");}return 0;}
0 0
- poj 3784 Running Median/sbt
- POJ 3784 Running Median
- POJ 3784 Running Median
- POJ 3784 Running Median
- POJ 3784 Running Median
- POJ 3784 Running Median
- poj 3784 Running Median
- poj 3784 Running Median 二叉堆
- POJ 3784.Running Median
- POJ 3784 Running Median 对顶堆算法
- POJ 3784 Running Median 动态求中位数 堆
- POJ 3784 Running Median简单版本可AC
- POJ 3784 Running Median 动态求中位数 堆
- zoj 3612 Median (SBT)
- zoj 3612 Median/sbt
- ZOJ 3612 Median(SBT)
- poj3784 Running Median
- HDU 3282-Running Median
- 【总结】Effective java经验之谈,泛型
- POJ 1837 Balance(动态规划之背包问题)
- block的学习心得
- Spark Standalone 以及 HDFS系统环境搭建
- 次小生成树
- poj 3784 Running Median/sbt
- ListView--1 之 LayoutInfLayout源码分析
- 在Java程序中调用Salesforce REST API
- Anniversary party(树形DP入门)
- http-equiv是什么意思(转载)
- 实例讲解OSGI开发
- FZU2185 树的路径覆盖
- Uncaught RangeError: Invalid string length
- Xtrabackup 流备份与恢复