[洛谷1383]高级打字机 题解
题解
这道题一看就珂以用主席树啊
这是一道神奇的题目,那么我们先敲一个主席树,然后维护一个数组len,表示下一次应该在len + 1插入,
之后对于T操作,在上一个版本的len + 1上直接执行插入
对于Q操作,直接查询
对于U操作,直接找到对应版本复制即可
rt[rt_num] = rt[((rt_num - num - 1) > 0 ? (rt_num - num - 1) : 0)];
ls[rt_num] = ls[((rt_num - num - 1) > 0 ? (rt_num - num - 1) : 0)], rs[rt_num] = rs[((rt_num - num - 1) > 0 ? (rt_num - num - 1) : 0)];
len[rt_num] = len[rt_num - num - 1];
代码
#include <cstdio>
#include <iostream>
#define ll long longusing namespace std;ll read(){ll x = 0; int zf = 1; char ch = ' ';while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();if (ch == '-') zf = -1, ch = getchar();while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar(); return x * zf;
}int s[20000005];
int ls[20000005], rs[20000005];
int len[20000005];
int rt[20000005], pre[20000005];
int tot;inline void a(int pos){s[pos] = s[ls[pos]] + s[rs[pos]];
}inline int getNew(){return (++tot);
}void build(int pos, int l, int r){if (l == r){if (pos > tot)tot = pos;s[pos] = 0;return ;}int mid = (l + r) >> 1;ls[pos] = pos << 1, rs[pos] = (pos << 1) + 1;build(pos << 1, l, mid);build((pos << 1) + 1, mid + 1, r);a(pos);
}int query(int pos, int l, int r, int k){if (l == r)return s[pos];int mid = (l + r) >> 1;if (k <= mid)return query(ls[pos], l, mid, k);elsereturn query(rs[pos], mid + 1, r, k);
}void add(int pos, int pre, int l, int r, int k, int val){if (l == r){s[pos] = val;return ;}int mid = (l + r) >> 1;if (k <= mid){rs[pos] = rs[pre]; ls[pos] = getNew();add(ls[pos], ls[pre], l, mid, k, val);}else{ls[pos] = ls[pre]; rs[pos] = getNew();add(rs[pos], rs[pre], mid + 1, r, k, val);}a(pos);
}int main(){freopen("type.in", "r", stdin);freopen("type.out", "w", stdout);int q;q = read();rt[0] = 1, len[0] = 0;build(rt[0], 1, 100000);char op; int num; int rt_num = 0;for (int i = 1; i <= q; ++i){cin >> op;if (op == 'T'){char c; cin >> c;rt[++rt_num] = getNew();len[rt_num] = len[rt_num - 1] + 1;add(rt[rt_num], rt[rt_num - 1], 1, 100000, len[rt_num], (int)(c));}else if (op == 'Q'){num = read();printf("%c\n", (char)(query(rt[rt_num], 1, 100000, num)));}else if (op == 'U'){num = read(), ++rt_num;rt[rt_num] = rt[((rt_num - num - 1) > 0 ? (rt_num - num - 1) : 0)];ls[rt_num] = ls[((rt_num - num - 1) > 0 ? (rt_num - num - 1) : 0)], rs[rt_num] = rs[((rt_num - num - 1) > 0 ? (rt_num - num - 1) : 0)];len[rt_num] = len[rt_num - num - 1];}}fclose(stdin);fclose(stdout);return 0;
}
转载于:https://www.cnblogs.com/linzhengmin/p/10925395.html
[洛谷1383]高级打字机 题解相关推荐
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P1273 有线电视网 题解
洛谷P1273 有线电视网 题解 题目链接:P1273 有线电视网 题意: 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为 ...
- 洛谷P4568 [JLOI2011] 飞行路线 题解
洛谷P4568 [JLOI2011] 飞行路线 题解 题目链接:P4568 [JLOI2011] 飞行路线 题意: Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公 ...
- 洛谷P3426 [POI2005]SZA-Template 题解
洛谷P3426 [POI2005]SZA-Template 题解 题目链接:P3426 [POI2005]SZA-Template 题意:你打算在纸上印一串字母. 为了完成这项工作,你决定刻一个印章. ...
- 洛谷P1156 垃圾陷阱 题解浅谈刷表法与填表法
洛谷P1156 垃圾陷阱 题解&浅谈刷表法与填表法 填表法 :就是一般的动态规划,当前点的状态,可以直接用状态方程,根据之前点的状态推导出来. 刷表法:由当前点的状态,更新其他点的状态.需要注 ...
- 洛谷P1262 间谍网络题解
洛谷P1262 间谍网络题解 题目大意 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果 A 间谍手中掌握着关于 B 间谍的犯罪证据,则称 A 可以揭发 B.有些间谍收受贿赂,只要 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- 洛谷P4099 [HEOI2013]SAO 题解
洛谷P4099 [HEOI2013]SAO 题解 题目链接:P4099 [HEOI2013]SAO 题意: Welcome to SAO ( Strange and Abnormal Online). ...
最新文章
- 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解(二)
- Linux嗅探ettercap
- jxl生成表格(合并单元格,字体,样式)
- spark的Web UI查看DAG的两种方式
- 这是小学数学的26个知识点,小孩hold不住,父母也易犯错
- 高通骁龙cpu排行_骁龙系列处理器性能分析,你的手机是什么处理器?
- 数列分段Section I(洛谷-P1181)
- 退出功能—session
- H5 获取连接参数,判断是否是手机端
- Krasovsky_1940_Albers投影介绍及转换
- java连接FTP下载文件
- mac上投屏android_有哪些支持安卓投屏Mac的软件
- Java中统计耗时的方法
- Nebula3 资源管理系统
- 和平精英有了氪金系统,玩家再也不敢开挂了?网友:你到亚服看看
- shell遍历多个数组
- 手机网页UI框架jQuery Mobile介绍之按钮篇
- cam全称_英文缩写,全称
- 【翻译】数据资产价值评估
- VirtualAPP技术应用及安全分析报告