[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的题目但是总感觉好像并没有弄得比较明白啊..(我的妈果然蒟蒻) 这题的话可以说是难 ...
随机推荐
- 前端——实用UI组件库
Angular UI 组件 ngx-bootstrap 是一套Bootstrap 组件 官网:https://valor-software.com/ngx-bootstrap/#/ github: h ...
- JavaScript的事件对象_实现拖拽
实现拖拽一个元素 拖拽的流程: 当鼠标在被拖拽元素上按下时,开始拖拽 onmousedown 当鼠标移动时被拖拽元素跟随鼠标移动 onmousemove 当鼠标松开时,被拖拽元素固定在当前位置 onm ...
- Tomcat的免安装配置
Tomcat免安装配置 以下配置说明全部针对免安装版本 基于tomcat的安装目录和运行目录是可以不同的,本文都会进行说明 首先简单介绍一下tomcat的目录结构,一般情况下,tomcat包括以下子目 ...
- weblogic之CVE-2016-0638反序列化分析
此漏洞是基于CVE-2015-4852漏洞进行黑名单的绕过,CVE-2015-4852补丁主要应用在三个位置上 weblogic.rjvm.InboundMsgAbbrev.class :: Serv ...
- Kali-linux破解LM Hashes密码
LM(LAN Manager)Hash是Windows操作系统最早使用的密码哈希算法之一.在Windows 2000.XP.Vista和Windows 7中使用了更先进的NTLMv2之前,这是唯一可用 ...
- spring中的default-lazy-init参数和lazy-init
在spring的配置中的根节点上有个 default-lazy-init="true"配置: 1.spring的default-lazy-init参数 此参数表示延时加载, ...
- (Les17 移动数据)expdp/impdp
oracle 11.2.0 expdp/impdp 数据泵参数 expdp参数=========================================================== ...
- 清理 Xcode 10 记录
1,清理 ~/Library/Developer/CoreSimulator/Devices 说明:该目录存放当前的所有模拟器,每个标识符代表一台机器,清理掉避免存在旧版本的模拟器缓存 执行: 关闭模 ...
- activemq的高级特性:集群实战
高级特性实战需求 当消费端是多个集群,集群A又包含多个服务. 当每个集群都要接受相同的一批消息,而集群内的每个服务都去分摊消息. 解决办法一:级联 增加一个中转者.但是不是特别的优化,而且性能也不是特 ...
- echarts动态加载数据无法更新series 无法更新图表
最近遇到一个Echarts图表无法动态更新数据的问题 最初我在option中设置series的值为一个数组,想着通过修改数组来动态更新图表,但是没变 化,后来发觉是因为图表数据会和之前的合并 看官方的 ...