神奇的线段树
来源:互联网 发布:数据库事务是什么意思 编辑:程序博客网 时间:2024/06/06 04:06
迟点再写注释
#include <iostream>
#include <cstdio>
#include<map>
#include<cstring>
#include<stack>
using namespace std;
const int MAX = 200005;
struct{
int l,r,w;
}node[3*MAX];
int id, pos[MAX],val[MAX],ans[MAX];
void BuildTree(int left, int right, int u)
{
node[u].l = left;
node[u].r = right;
node[u].w = right - left + 1;//储存区间节点个数
// printf("%d %d %d %d\n",node[u].l ,node[u].r,node[u].w,u);
if (left < right){
BuildTree(left, (left+right)>>1,u<<1);//递归左子树
BuildTree(((left+right)>>1)+1,right,(u<<1)+1);//递归右子树
}
}
void updata(int pos, int u)
{
node[u].w--;
printf("%d %d %d\n",node[u].l,node[u].r,u);
if (node[u].l == node[u].r){
id = node[u].l;
return ;
}
if (node[u<<1].w >= pos)
updata(pos, u<<1);
else {
pos -= node[u<<1].w;
updata(pos, (u<<1)+1);
}
}
int main(void)
{
int n, i;
while(~scanf("%d",&n)){
BuildTree(1,n,1);
for (i = 1; i <= n; i++){
scanf("%d%d",&pos[i],&val[i]);
}
for (i = n; i >= 1; i--){
updata(pos[i]+1,1);
ans[id] = val[i];
printf("%d\n",id);
}
for (i = 1; i <= n; i++){
printf("%d ",ans[i]);
}
printf("\n");
}
return 0;
}
阅读全文
0 0
- 神奇的线段树
- hdu 1540 神奇的线段树
- 【bzoj3165】[Heoi2013]Segment 神奇的线段树
- smoj2011(神奇的线段树)
- bzoj3244 NOI2013树的计数 神奇脑洞题+线段树
- HDU 5643 (神奇的打表 线段树)
- CF 452F Permution 神奇的线段树判断
- 【JZOJ5270】【GDOI2018模拟】神奇的矩阵(二维线段树)
- Bzoj3790:神奇项链:manacher+线段树+贪心
- JZOJ4417 【HNOI2016模拟4.1】神奇的字符串 线段树维护信息
- jzoj4417 【HNOI2016模拟4.1】神奇的字符串 (映射,权值线段树)
- 神奇的树
- 神奇的树
- bzoj 3790: 神奇项链 (manacher+线段树优化DP)
- 神奇的算法:B树
- 神奇的最小生成树........
- UVA LA 2797 PSLG 线段闭合圈 神奇的精度问题
- 灵活而神奇的 伸展树!
- 【Java】--反射(Java)
- 一次完整的HTTP请求
- 数据库系统概论第五版习题解析
- Scrapy框架之利用ImagesPipeline下载图片
- LeetCode 507 Perfect Number(完美数字)
- 神奇的线段树
- Python之Pandas库
- c3p0的配置方式
- Python之NumPy库
- 51nod-1279 扔盘子(单调栈)
- Rsync同步算法
- JSTL标准标签库之格式化标签(三)
- LuoguP2254 瑰丽华尔兹
- Fibonacci