4.24 省选模拟赛 欧珀瑞特 主席树 可持久化trie树


很容易的一道题目。大概。不过我空间计算失误MLE了 我草草的计算了一下没想到GG了。
关键的是 我学了一个dalao的空间回收的方法 但是弄巧成拙了。
题目没有明确指出 在任意时刻数组长度为有限制什么的 况且这道题也不卡空间 nlogn或者再大一倍的空间都是可以过的。
但是 我仍然作死写了两个队列 进行空间的回收 (我也不知道我在干什么。
(可能完全觉得好玩吧)
开的空间大小:\(\frac{10\cdot 30\cdot 500000\cdot 4}{1000000}=600MB\)
所以GG了。 值得一提的是考试的时候没有多想直接主席树+可持久化trie了。
其实光可持久化trie树也是可以求区间第k大和区间<=x的数的个数的。
const int MAXN=500010;
int n,m,maxx,id,ans,mark;
int a[MAXN];
int rt1[MAXN],rt2[MAXN],pos1[MAXN*20],pos2[MAXN*20];
struct wy{int l,r,sum;}t[MAXN*20];
struct jl{int c[2],sz;}s[MAXN*30];
queue<int>q1,q2;
inline int getnum1()
{
int w=q1.front();q1.pop();
l(w)=r(w)=sum(w)=0;
return w;
}
inline int getnum2()
{
int w=q2.front();q2.pop();
sz(w)=s[w].c[0]=s[w].c[1]=0;
return w;
}
inline void insert(int &p,int las,int l,int r,int x)
{
p=getnum1();pos1[p]=id;t[p]=t[las];
if(l==r){++sum(p);return;}
int mid=(l+r)>>1;
if(x<=mid)insert(l(p),l(las),l,mid,x);
else insert(r(p),r(las),mid+1,r,x);
sum(p)=sum(l(p))+sum(r(p));
}
inline void build(int &p,int las,int depth,int x)
{
p=getnum2();pos2[p]=id;s[p]=s[las];
if(!depth){++sz(p);return;}
int w=(x&(1<<(depth-1)))?1:0;
build(s[p].c[w],s[las].c[w],depth-1,x);
sz(p)=sz(s[p].c[0])+sz(s[p].c[1]);
}
inline void ask1(int p,int las,int depth,int x)
{
if(!depth)return;
int w=(x&(1<<(depth-1)))?1:0;
if(sz(s[p].c[w^1])-sz(s[las].c[w^1])>0)
{
if(w^1)ans=ans|(1<<(depth-1));
ask1(s[p].c[w^1],s[las].c[w^1],depth-1,x);
}
else
{
if(w)ans=ans|(1<<(depth-1));
ask1(s[p].c[w],s[las].c[w],depth-1,x);
}
}
inline void del1(int &p)
{
if(!p)return;
if(pos1[p]==mark)
{
del1(l(p));
del1(r(p));
q1.push(p);p=0;
}
return;
}
inline void del2(int &p)
{
if(!p)return;
if(pos2[p]==mark)
{
del2(s[p].c[0]);
del2(s[p].c[1]);
q2.push(p);p=0;
}
return;
}
inline int ask(int p,int las,int l,int r,int x)
{
if(r<=x)return sum(p)-sum(las);
int mid=(l+r)>>1;
if(x>mid)return ask(l(p),l(las),l,mid,x)+ask(r(p),r(las),mid+1,r,x);
return ask(l(p),l(las),l,mid,x);
}
inline int query(int p,int las,int l,int r,int x)
{
if(l==r)return l;
int mid=(l+r)>>1;
int ww=sum(l(p))-sum(l(las));
if(ww>=x)return query(l(p),l(las),l,mid,x);
return query(r(p),r(las),mid+1,r,x-ww);
}
int main()
{
freopen("operator.in","r",stdin);
freopen("operator.out","w",stdout);
get(m);maxx=500010;
rep(1,20*MAXN,i)q1.push(i),q2.push(i);
rep(1,m,i)
{
int op,x,y,z;
get(op)+1;get(x);
if(op==1)
{
a[++n]=x;id=n;
insert(rt1[n],rt1[n-1],1,maxx,x);
build(rt2[n],rt2[n-1],21,x);
}
if(op==2)
{
get(y);get(z);ans=0;
ask1(rt2[y],rt2[x-1],21,z);
put(ans);
}
if(op==3)
{
fep(n,n-x+1,j)
{
mark=j;
del1(rt1[j]);
del2(rt2[j]);
}
n=n-x;
}
if(op==4)
{
get(y);get(z);
put(ask(rt1[y],rt1[x-1],1,maxx,z));
}
if(op==5)
{
get(y);get(z);
put(query(rt1[y],rt1[x-1],1,maxx,z));
}
}
return 0;
}
4.24 省选模拟赛 欧珀瑞特 主席树 可持久化trie树的更多相关文章
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- 【BZOJ2741】【FOTILE模拟赛】L 分块+可持久化Trie树
[BZOJ2741][FOTILE模拟赛]L Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max( ...
- @省选模拟赛03/16 - T3@ 超级树
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...
- 3.28 省选模拟赛 染色 LCT+线段树
发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...
- NOI2019省选模拟赛 第六场
传送门 又炸了-- \(A\) 唐时月夜 不知道改了什么东西之后就\(A\)掉了\(.jpg\) 首先,题目保证"如果一片子水域曾经被操作过,那么在之后的施法中,这片子水域也一定会被操作&q ...
- 省选模拟赛第四轮 B——O(n^4)->O(n^3)->O(n^2)
一 稍微转化一下,就是找所有和原树差距不超过k的不同构树的个数 一个挺trick的想法是: 由于矩阵树定理的行列式的值是把邻接矩阵数值看做边权的图的所有生成树的边权乘积之和 那么如果把不存在于原树中的 ...
- NOI2019省选模拟赛 第五场
爆炸了QAQ 传送门 \(A\) \(Mas\)的童年 这题我怎么感觉好像做过--我记得那个时候还因为没有取\(min\)结果\(100\to 0\)-- 因为是个异或我们肯定得按位考虑贡献了 把\( ...
- 省选模拟赛 arg
1 arg (arg.cpp/in/out, 1s, 512MB)1.1 Description给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. ...
- [noi.ac省选模拟赛]第10场题解集合
题目 比赛界面. T1 不难想到,对于一个与\(k\)根棍子连接的轨道,我们可以将它拆分成\(k+1\)个点,表示这条轨道不同的\(k+1\)段. 那么,棍子就成为了点与点之间的边.可以发现,按照棍子 ...
随机推荐
- 网页开发中利用CSS以图换字的多中实现方法总汇
在h1标签中,新增span标签来保存标题内容,然后将其样式设置为display:none <style> h1 { width: 64px; height: 64px; backgroun ...
- 数据库基础01-SQL基础语法
数据库查询语言(Structured Query Language) 数据库查询语言: DDL(data definition language) -数据定义语言,建库建表 DML (data man ...
- POJ - 3463 Sightseeing 最短路计数+次短路计数
F - Sightseeing 传送门: POJ - 3463 分析 一句话题意:给你一个有向图,可能有重边,让你求从s到t最短路的条数,如果次短路的长度比最短路的长度多1,那么在加上次短路的条数. ...
- TCP Wrappers(简单防火墙)---限制IP登录ssh
1.TCP Wrappers 简介 TCP_ Wrappers是- 一个工作在第四层(传输层)的的安全工具,对有状态连接(TCP)的特定服务进行安全检测并实现访问控制,界定方式是凡是调用libwrap ...
- 前端开发-css
css: 是给html标签装饰的,变得更好看. 注释: 单行注释:/*注释内容*/ 多行注释:/* 注释内容 注释内容 注释内容 */ 通常我们在写css代码时也会用注释来划分区域(html代码多,同 ...
- JVM中栈的frames详解
目录 简介 JVM中的栈 Frame Local Variables本地变量 Operand Stacks Dynamic Linking动态链接 方法执行完毕 简介 我们知道JVM运行时数据区域专门 ...
- CSS(二)- 选择器 - 一定要搞懂的选择器优先级和权重问题
css的优先级之前一直没怎么注意没当回事,总以为对同一元素靠后的渲染会覆盖前面的渲染,要是覆盖不了那就来个!important嘛.直到我那在学前端基础的后端伙伴拿一个问题问住了我,我才意识到这是重点中 ...
- 数据可视化之 图表篇(五) PowerBI图表不够炫酷?来看看这个
现在这个大数据时代,每时每刻.各行各业都在产生多种多样的海量数据,如何简单高效的来理解.挖掘这些数据,发现背后的见解就非常重要. 本文介绍这个图表就可以帮你快速发现海量数据背后的见解,微软研究院打造的 ...
- 数据库分布式事务XA规范介绍及Mysql底层实现机制
1. 引言 分布式事务主要应用领域主要体现在数据库领域.微服务应用领域.微服务应用领域一般是柔性事务,不完全满足ACID特性,特别是I隔离性,比如说saga不满足隔离性,主要是通过根据分支事务执行成功 ...
- 如果你还不知道如何控制springboot中bean的加载顺序,那你一定要看此篇
1.为什么需要控制加载顺序 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题.在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功 ...