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与内存-[线段树的神秘操作]的更多相关文章

  1. [2016北京集训测试赛15]statement-[线段树+拆环]

    Description Solution 由于题目要求,将a[i]->b[i](边权为i)后所得的图应该是由森林和环套树组合而成. 假如是树形结构,所有的t[i]就直接在线段树t[i]点的dfs ...

  2. 2016北京集训测试赛(十六)Problem A: 任务安排

    Solution 这道题告诉我们, 不能看着数据范围来推测正解的时间复杂度. 事实证明, 只要常数足够小, \(5 \times 10^6\)也是可以跑\(O(n \log n)\)算法的!!! 这道 ...

  3. 2016北京集训测试赛(十四)Problem B: 股神小D

    Solution 正解是一个\(\log\)的link-cut tree. 将一条边拆成两个事件, 按照事件排序, link-cut tree维护联通块大小即可. link-cut tree维护子树大 ...

  4. 2016北京集训测试赛(十四)Problem A: 股神小L

    Solution 考虑怎么卖最赚钱: 肯定是只卖不买啊(笑) 虽然说上面的想法很扯淡, 但它确实能给我们提供一种思路, 我们能不买就不买; 要买的时候就买最便宜的. 我们用一个优先队列来维护股票的价格 ...

  5. 【2016北京集训测试赛(十)】 Azelso (期望DP)

    Time Limit: 1000 ms   Memory Limit: 256 MB Description 题解 状态表示: 这题的状态表示有点难想...... 设$f_i$表示第$i$个事件经过之 ...

  6. 【2016北京集训测试赛(二)】 thr (树形DP)

    Description 题解 (这可是一道很早就碰到的练习题然后我不会做不想做,没想到在Contest碰到欲哭无泪......) 题目大意是寻找三点对的个数,使得其中的三个点两两距离都为d. 问题在于 ...

  7. 【2016北京集训测试赛(十六)】 River (最大流)

    Description  Special Judge Hint 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. 题解 题目大意:给定两组点,每组有$n$个点,有若干条跨组 ...

  8. 【2016北京集训测试赛】river

    HINT 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. [吐槽] 嗯..看到这题的想法的话..先想到了每个点的度为2,然后就有点不知所措了 隐隐约约想到了网络流,但并没 ...

  9. 【2016北京集训测试赛】azelso

    [吐槽] 首先当然是要orzyww啦 以及orzyxq奇妙顺推很强qwq 嗯..怎么说呢虽然说之前零零散散做了一些概d的题目但是总感觉好像并没有弄得比较明白啊..(我的妈果然蒟蒻) 这题的话可以说是难 ...

随机推荐

  1. IDEA 常用插件收藏

    1.maven helper 查看maven依赖,解决jar包冲突. 2.Alibaba Java Coding Guidelines  代码风格遵循阿里java规范. 3.Lombok 简化实体中的 ...

  2. BZOJ 1002 轮状病毒 矩阵树定理

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1002 题目大意: 给定n(N<=100),编程计算有多少个不同的n轮状病毒 思路 ...

  3. C++Primer学习笔记《三》

    数组名事实上就是一个常指针,指向数组元素中第一个的地址,在程序中假设要用指针遍历数组,不能直接用数组名来自增或自减.由于它是常量,一般先把数组名保存一份同类型的指针,然后再用这个指针来自增或是自减来实 ...

  4. 用Qt制作的Android独立游戏《吃药了》公布

           一个多月的努力最终有了回报,我自己研究制作的独立游戏<吃药了>.最终在360应用商店上线了.        这一款游戏呢.使用的是Qt开发的.事实上开发这款简单的应用之前.我 ...

  5. TensorFlow函数(三)tf.variable_scope() 和 tf.name_scope()

    tf.name_scope() 此函数作用是共享变量.在一个作用域scope内共享一些变量,简单来说,就是给变量名前面加个变量空间名,只限于tf.Variable()的变量 tf.variable_s ...

  6. 自定义组件---图片和文字实现ImageButton效果

    1.效果图 2.自定义代码: <span style="font-family:Comic Sans MS;font-size:14px;">public class ...

  7. keepalived 的进程/usr/sbin/keepalived -D 只有2个

    操作系统:openSUSE 11.3 (x86_64) /usr/sbin/keepalived -D  只有2条 日志:ls  /var/log/messages* -lrth Can't init ...

  8. 闲话缓存:ZFS 读缓存深入研究-ARC(一)

    在Solaris ZFS 中实现的ARC(Adjustable Replacement Cache)读缓存淘汰算法真是很有意义的一块软件代码.它是基于IBM的Megiddo和Modha提出的ARC(A ...

  9. LeetCode29.两数相除 JavaScript

    给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...

  10. java的多线程和并发库

    一.多线程基础知识 1.传统使用类Thread和接口Runnable实现 1)在Thread子类覆盖的run方法中编写运行代码 2)在传递给Thread对象的Runnable对象的run方法中编写代码 ...