[CSP-S模拟测试]:大新闻(主席树)
题目传送门(内部题20)
输入格式
第一行为两个数$n,m$,意义如题所述。
接下来一行$n$个数,代表一开始$n$条大新闻的$naive$值。
接下来$m$行,每行一个操作,输入格式如下:
读入$1$,代表第一种事件。
读入$2,x$,代表第二种事件。
读入$3,l,r,k$,代表第三种事件。
输出格式
对于每一个第三种事件输出一行整数,代表答案
样例
样例输入:
6 8
2 7 4 3 5 9
3 2 5 3
1
2 4
3 1 4 2
2 6
3 1 7 5
1
3 3 6 4
样例输出:
5
4
6
9
数据范围与提示
样例解释:
初始序列为$2,7,4,3,5,9$。
询问$7,4,3,5$的第$3$小值,答案为$5$。
操作后序列变成$7,4,3,5,9$。
操作后序列变成$4,7,4,3,5,9$。
询问$4,7,4,3$的第$2$小值,答案为$4$。
操作后序列变成$6,4,7,4,3,5,9$。
询问序列$6,4,7,4,3,5,9$的第$5$小值,答案为$6$。
操作后序列变成$4,7,4,3,5,9$。
询问序列$4,3,5,9$的第$4$小值,答案为$9$。
数据范围:
对于$30\%$的数据,满足$1\leqslant n,m\leqslant 2,000$。
对于$50\%$的数据,满足$1\leqslant n,m\leqslant 30,000$。
对于$70\%$的数据,满足$1\leqslant n,m\leqslant 80,000$。
对于$100\%$的数据,满足$1\leqslant n,m\leqslant 2\times 10^5$。
保证数据合法,当没有新闻时不存在删除操作。
保证$1\leqslant naive$值$\leqslant 10^9$,保证$1\leqslant l\leqslant r\leqslant $当前新闻数,$k\leqslant r−l+1$。
题解
观察数据范围和操作,发现是主席树板子题(然而并不会打……)。
不会的先学一下主席树吧。
正解直接用的树上差分,少个$\log$。
时间复杂度:$(n+m)\log^2n$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[200001],root[500000],tot;
int trsum[10000001],lson[10000001],rson[10000001];
void insert(int &x,int pre,int l,int r,int w)
{
x=++tot;
trsum[x]=trsum[pre]+1;
lson[x]=lson[pre];
rson[x]=rson[pre];
if(l==r)return;
int mid=(l+r)>>1;
if(w<=mid)insert(lson[x],lson[pre],l,mid,w);
else insert(rson[x],rson[pre],mid+1,r,w);
}
int ask(int x,int pre,int l,int r,int k)
{
if(l==r)return l;
int mid=(l+r)>>1;
if(trsum[lson[x]]-trsum[lson[pre]]>=k)return ask(lson[x],lson[pre],l,mid,k);
else return ask(rson[x],rson[pre],mid+1,r,k-trsum[lson[x]]+trsum[lson[pre]]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=n;i;i--)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
insert(root[i],root[i-1],1,1<<30,a[i]);
while(m--)
{
int opt;
scanf("%d",&opt);
switch(opt)
{
case 1:n--;break;
case 2:
int x;
scanf("%d",&x);
n++;
insert(root[n],root[n-1],1,1<<30,x);
break;
case 3:
int l,r,k;
scanf("%d%d%d",&l,&r,&k);
printf("%d\n",ask(root[n-l+1],root[n-r],1,1<<30,k));
break;
}
}
return 0;
}
rp++
[CSP-S模拟测试]:大新闻(主席树)的更多相关文章
- [CSP-S模拟测试]:序列(主席树)
题目描述 小$A$把自己之前得到的序列展示给了小$B$,不过这一次,他并不要求小$B$模仿他之前的行为.他给了小$B$一些询问,每个询问都是$l\ r\ x$的形式,要求小$B$数出在序列的第$l$个 ...
- POJ 2104 && POJ 2761 (静态区间第k大,主席树)
查询区间第K大,而且没有修改. 使用划分树是可以做的. 作为主席树的入门题,感觉太神奇了,Orz /* *********************************************** ...
- zoj2112 主席树动态第k大 (主席树&&树状数组)
Dynamic Rankings Time Limit: 10 Seconds Memory Limit: 32768 KB The Company Dynamic Rankings has ...
- 静态区间第k大(主席树)
POJ 2104为例(主席树入门题) 思想: 可持久化线段树,也叫作函数式线段树,也叫主席树(高大上). 可持久化数据结构(Persistent data structure):利用函数式编程的思想使 ...
- POJ 2104 K-th Number ( 求取区间 K 大值 || 主席树 || 离线线段树)
题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用 ...
- 7.18 NOIP模拟测试5 星际旅行+砍树+超级树
T1 星际旅行 题意:n个点,m条边,无重边,有自环,要求经过m-2条边两次,2条边一次,问共有多少种本质不同的方案.本质不同:当且仅当至少存在一条边经过次数不同. 题解:考试的时候理解错题,以为他是 ...
- [CSP-S模拟测试]:Weed(线段树)
题目描述 $duyege$的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹.为了查出真相,$duyege$准备修好电脑之后再进行一次金坷垃的模拟实验.电脑上面有若干层金坷垃,每次只能在上面撒上一层高度 ...
- [CSP-S模拟测试]:椎(线段树维护区间最值和单调栈)
题目描述 虽不能至,心向往之. $Treap=Tree+Heap$ 椎$=$树$+$堆 小$\pi$学习了计算机科学中的数据结构$Treap$. 小$\pi$知道$Treap$指的是一种树. 小$\p ...
- [CSP-S模拟测试]:big(Trie树+贪心)
题目描述 你需要在$[0,2^n)$中选一个整数$x$,接着把$x$依次异或$m$个整数$a_1~a_m$.在你选出$x$后,你的对手需要选择恰好一个时刻(刚选完数时.异或一些数后或是最后),将$x$ ...
随机推荐
- SVG绘制随机的柱形图+php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【SD系列】SAP SD模块-销售收入科目的配置
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[SD系列]SAP SD模块-销售收入科目的配置 ...
- Java相关面试题总结+答案(四)
[反射] 57. 什么是反射? 反射是在运行状态中,对于任意一个类,都能够知道该类的所有属性和方法,对于任意一个对象,都能够获得该对象的任一属性和方法:这种动态获取信息以及动态调用对象的方法的功能称之 ...
- [Bzoj1009][HNOI2008]GT考试(动态规划)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 显而易见的动态规划加矩阵快速幂,不过转移方程不怎么好想,dp[i][j]表示长度为 ...
- Java并发编程:Concurrent锁机制解析
Java并发编程:Concurrent锁机制解析 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: # ...
- sshpass非交互SSH密码验证
1.yum安装yum install sshpass -y1.1编译安装yum install wget -ywget http://sourceforge.net/projects/sshpass/ ...
- opencv2——图像上的算术运算4
1.图像算术运算 参数含义: src1:第一张图像 src2:第二张图像 dst:destination,目标图像,需要提前分配空间,可省略 mask:掩膜 scale:缩放比,常量 dtype:数据 ...
- nginx+lua+redis实现灰度发布_test
nginx+lua+redis实现灰度发布: 灰度发布是指在黑白之间能够平滑过渡的一种方式 AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见, ...
- k3 cloud中数值以百分比的形式展示
显示格式化字符串:P去掉区域设置的勾选
- 你创不出伟大的事业,因为……
你认为自己是对的,而别人都不了解.你忙著实现自己的梦想,却不管你的梦想对这世界有什么意义.你成天想著自己的问题,对别人的问题却提不起任何兴趣. 你活在自己的世界 你认为自己是对的,而别人都不了解.你忙 ...