[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的题目但是总感觉好像并没有弄得比较明白啊..(我的妈果然蒟蒻) 这题的话可以说是难 ...
随机推荐
- 《梦断代码》读书笔记 part3
第六章:搞掂设计方案 备份很重要. 必须从小项目开始,而且永远不要期望它变大,如果你这么想,就会做过度设计,把它想象得过于重要,更坏的情况是,你可能会被自己想象中的艰难工作所吓到.所以要从小 处起步, ...
- gluoncv voc_detection
https://github.com/zhreshold/gluon-cv/commit/73b3986aaa2e0d0e6f3f428c12072e3a9d29905e gluoncv可能版本还没更 ...
- freemarker模板加载TemplateLoader常见方式
使用过freemarker的肯定其见过如下情况: java.io.FileNotFoundException: Template xxx.ftl not found. 模板找不到.可能你会认为我明明指 ...
- 【nodejs】学习笔记
学习链接:http://www.cnblogs.com/zhongweiv/p/nodejs_environment.html (一)简介及环境安装 Node.js是让Javascript脱离浏览器运 ...
- PHP一个表单多个提交按钮解决方法
1.html页面<注:多个按钮的name值必须相同> <form action="{:U('Index/index')}" method="post&q ...
- HDU 1198 Farm Irrigation(并查集,自己构造连通条件或者dfs)
Farm Irrigation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- 大话Linux内核中锁机制之原子操作、自旋锁
转至:http://blog.sina.com.cn/s/blog_6d7fa49b01014q7p.html 很多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其 ...
- Spring boot Mybatis整合构建Rest服务(超细版)
Springboot+ Mybatis+MySql整合构建Rest服务(涵盖增.删.改.查) 1.概要 1.1 为什么要使用Spring boot? 1.1.1 简单方便.配置少.整合了大多数框架 ...
- C++ C# VC VC.net以及VC++有什么区别和联系?
C/C++是编程语言,C是C++的爸爸,也就是说C++从C发展而来,而C++完全兼容C的语法.国际上有一个专门管理C++的机构,它们负责C++的标准制定. VC++是微软公司的C++编译环境,使用它可 ...
- mysql5.7关于使用到OR是否会用到索引并提高查询效率的探讨
相信很多人在mysql中看到了where条件中使用到了or就会以为这样是不会走索引的,通常会使用union all或者in 来进行优化,事实并不是想象的这样具体问题具体分析. 下面我们来看看 首先我们 ...