[2016北京集训测试赛5]小Q与内存-[线段树的神秘操作]
Description

Solution
哇真的异常服气。。线段树都可以搞合并和拆分的啊orzorz。神的世界我不懂
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int M=;
const int N=;
int sz[M],lc[M],rc[M],tag[M],rt[N],all_work,cnt;
int _new(int x=)
{
int o=++cnt;
tag[o]=x-;
sz[o]=<<tag[o];
lc[o]=rc[o]=;
return cnt;
}
void pushdown(int o)
{
if (!tag[o]) return;
lc[o]=_new(tag[o]);
rc[o]=_new(tag[o]);
tag[o]=;
}
int split(int o,int k)
{
int now=++cnt,re=now;
pushdown(o);
while (lc[o]||rc[o])
{
tag[now]=;sz[now]=k;sz[o]-=k;
if (k<=sz[lc[o]])
{
lc[now]=_new();rc[now]=;
now=lc[now];o=lc[o];
} else
{
rc[now]=_new();lc[now]=lc[o];
k-=sz[lc[o]];lc[o]=;
now=rc[now];o=rc[o];
}
pushdown(o);
}
tag[now]=tag[o]=;
sz[now]=k;sz[o]-=k;
return re;
}
int merge(int x,int y)
{
if (!x||!y) return x+y;
lc[x]=merge(lc[x],lc[y]);
rc[x]=merge(rc[x],rc[y]);
sz[x]+=sz[y];
return x;
}
int query(int x,int k)
{
int o=rt[x];
if (x>all_work||k>=sz[o]) return -;
int re=;
while (lc[o]||rc[o])
{
re<<=;
if (lc[o]&&k<sz[lc[o]]) o=lc[o];
else k-=sz[lc[o]],re|=,o=rc[o];
}
return re*(<<tag[o])+k;
}
int T,n,root;
int _type,_k,_i,_p;
void clear()
{
cnt=all_work=;
root=_new();
}
int main()
{
scanf("%d",&T);
while (T--)
{
clear();
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%d",&_type);
if (_type==)
{
scanf("%d",&_k);
all_work++;
rt[all_work]=;
if (sz[root]<_k) {printf("failed\n");continue;}
rt[all_work]=split(root,_k);
printf("ok\n");
}
if (_type==)
{
scanf("%d",&_i);
if (_i>all_work||!rt[_i]) {printf("failed\n");continue;}
root=merge(root,rt[_i]);rt[_i]=;
printf("ok\n");
}
if (_type==)
{
scanf("%d%d",&_i,&_p);
int ans=query(_i,_p);
if (ans!=-) printf("%d\n",ans);
else printf("failed\n");
}
}
}
}
[2016北京集训测试赛5]小Q与内存-[线段树的神秘操作]的更多相关文章
- [2016北京集训测试赛15]statement-[线段树+拆环]
Description Solution 由于题目要求,将a[i]->b[i](边权为i)后所得的图应该是由森林和环套树组合而成. 假如是树形结构,所有的t[i]就直接在线段树t[i]点的dfs ...
- 2016北京集训测试赛(十六)Problem A: 任务安排
Solution 这道题告诉我们, 不能看着数据范围来推测正解的时间复杂度. 事实证明, 只要常数足够小, \(5 \times 10^6\)也是可以跑\(O(n \log n)\)算法的!!! 这道 ...
- 2016北京集训测试赛(十四)Problem B: 股神小D
Solution 正解是一个\(\log\)的link-cut tree. 将一条边拆成两个事件, 按照事件排序, link-cut tree维护联通块大小即可. link-cut tree维护子树大 ...
- 2016北京集训测试赛(十四)Problem A: 股神小L
Solution 考虑怎么卖最赚钱: 肯定是只卖不买啊(笑) 虽然说上面的想法很扯淡, 但它确实能给我们提供一种思路, 我们能不买就不买; 要买的时候就买最便宜的. 我们用一个优先队列来维护股票的价格 ...
- 【2016北京集训测试赛(十)】 Azelso (期望DP)
Time Limit: 1000 ms Memory Limit: 256 MB Description 题解 状态表示: 这题的状态表示有点难想...... 设$f_i$表示第$i$个事件经过之 ...
- 【2016北京集训测试赛(二)】 thr (树形DP)
Description 题解 (这可是一道很早就碰到的练习题然后我不会做不想做,没想到在Contest碰到欲哭无泪......) 题目大意是寻找三点对的个数,使得其中的三个点两两距离都为d. 问题在于 ...
- 【2016北京集训测试赛(十六)】 River (最大流)
Description Special Judge Hint 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. 题解 题目大意:给定两组点,每组有$n$个点,有若干条跨组 ...
- 【2016北京集训测试赛】river
HINT 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. [吐槽] 嗯..看到这题的想法的话..先想到了每个点的度为2,然后就有点不知所措了 隐隐约约想到了网络流,但并没 ...
- 【2016北京集训测试赛】azelso
[吐槽] 首先当然是要orzyww啦 以及orzyxq奇妙顺推很强qwq 嗯..怎么说呢虽然说之前零零散散做了一些概d的题目但是总感觉好像并没有弄得比较明白啊..(我的妈果然蒟蒻) 这题的话可以说是难 ...
随机推荐
- 有关js弹出提示框几种方法
1直接提示只有确定功能的提示框 只显示提示信息 alert(“提示信息”); alert ();的参数只有一个就是提示信息,无返回值 2 弹出输入框让你输入内容 prompt() ; 有两个参数:第一 ...
- Jenkins获取编译状态
背景:在通过python的API调用Jenkins,启动Jenkins的job任务时,是需要知道Jenkins的编译状态,获取编译状态为 status=server.get_build_info(jo ...
- 问题:一球从某高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?
import java.util.Scanner; //题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半:再落下,求它在第10次落地时,共经过多少米?第10次反弹多高? public c ...
- 劳动节前得空半天-总结一下最近使用的LINUX命令
一.搜索文件 1.locate xxx.log 全盘搜索xxx.log文件 2.which java 查找命令 3.ll xxx.log 在目录下查找文件 二.搜索内 ...
- xss练习平台及writeup
今天玩了一天的xss. 分享几个xss game https://xss.haozi.me/#/0x00 http://47.94.13.75/test/ writeup:http://www.cn ...
- Markdown语法初体验
前言 由于把博客主题样式换了,所以改用Markdown语法,让代码看起来更加舒服一些. 照葫芦画瓢 这里是H1标题(===) 这里是H2标题(---) 使用一个#号 使用两个#号 使用三个#号 引用 ...
- 说说Vue.js的v-for
v-for的话,相比传统的jQuery的 $.each或者for循环要简洁明了的多, 比如在Jquery中我要遍历数据,通常如下几种方式: $.each(apps, function(i, app) ...
- 404 Note Found队-Alpha2
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内 ...
- oracle基础知识过一遍(原创)
用户.角色.权限.表空间 create tablespace test1_tablespace datafile ‘test1file.dbf’ size 10m; create temporary ...
- Oracle插入(insert into)
Oracle插入(insert into) 转载:http://www.oraclejsq.com/article/010100199.html Oracle对表数据的插入是使用insert命令来执行 ...