博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1801 黑匣子_NOI导刊2010提高(06)
阅读量:4484 次
发布时间:2019-06-08

本文共 1971 字,大约阅读时间需要 6 分钟。

洛谷 P1801 黑匣子_NOI导刊2010提高(06)

题目:

  • 有图。转

题解:

  • 平衡树/对顶堆水题,以往的博客已经有对此类题目的详细讲解了。
#include 
#include
#include
#define N 200005#define inf 0x7fffffffusing namespace std;struct T {int l, r, val, dat, cnt, size;} t[N];int n, m, root, tot, pos = 1, now = 1;int a[N], b[N];int read(){ int x = 0, f = 1; char c = getchar(); while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();} while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();} return x *= f;}int New(int val){ t[++tot].val = val, t[tot].dat = rand(); t[tot].cnt = t[tot].size = 1; return tot;}void up(int p) {t[p].size = t[t[p].l].size + t[t[p].r].size + t[p].cnt;}void zig(int &y){ int x = t[y].l; t[y].l = t[x].r, t[x].r = y, y = x; up(t[y].r), up(y);}void zag(int &x){ int y = t[x].r; t[x].r = t[y].l, t[y].l = x, x = y; up(t[x].l), up(x);}void insert(int &p, int val){ if(!p) {p = New(val); return;} if(val == t[p].val) {t[p].cnt++, up(p); return;} if(val < t[p].val) { insert(t[p].l, val); if(t[t[p].l].dat > t[p].dat) zig(p); } else { insert(t[p].r, val); if(t[t[p].r].dat > t[p].dat) zag(p); } up(p);}int valOfRank(int p, int rank){ if(!p) return inf; if(t[t[p].l].size >= rank) return valOfRank(t[p].l, rank); if(t[t[p].l].size + t[p].cnt >= rank) return t[p].val; return valOfRank(t[p].r, rank - t[t[p].l].size - t[p].cnt);}int main(){ freopen("P1801.in", "r", stdin); freopen("P1801.out", "w", stdout); New(inf), New(-inf), t[1].l = 2, root = 1, up(1); n = read(), m = read(); for(int i = 1; i <= n; i++) a[i] = read(); for(int i = 1; i <= m; i++) b[i] = read(); for(int i = 1; i <= n; i++) { insert(root, a[i]); while(i == b[pos]) { printf("%d\n", valOfRank(root, now + 1)); pos++, now++; } } return 0;}

转载于:https://www.cnblogs.com/BigYellowDog/p/11321650.html

你可能感兴趣的文章
SQL SERVER 常用命令
查看>>
SQL SERVER 锁2
查看>>
PERCONA-TOOLKIT 工具文档
查看>>
再议mysql 主从配置
查看>>
cocos2dx中设置横竖版
查看>>
数据结构与算法之间的关系
查看>>
android捕获ListView中每个item点击事件
查看>>
海量数据处理算法—Bit-Map
查看>>
CentOS7 对比 CentOS6
查看>>
Android之条码扫描二维码扫描
查看>>
C++ ofstream和ifstream
查看>>
方法--动手又动脑 2018/10/14
查看>>
工作日志WebRoot--时间插件弹出层被遮挡
查看>>
常用的按键/输入口检测程序
查看>>
清晰易懂!关于PS入门的超详细笔记!
查看>>
linux下系统对于sigsegv错误时的处理
查看>>
Bat脚本学习-5:Oracle自动备份还原脚本
查看>>
洛谷 P4248: bzoj 3238: [AHOI2013]差异
查看>>
PHP中利用PHPMailer配合QQ邮箱实现发邮件
查看>>
sql 同一张表查询不同数据合并之后关联查询
查看>>