[luogu7476]苦涩
维护线段树,在其每一个节点上维护一个set(可重),以及子树内所有set的最大值
考虑下传标记,如果将所有元素全部下传复杂度显然不正确,但注意到我们仅关心于其中的最大值,即仅需要将最大值下传即可
其有可能需要在已经被完全覆盖的区间内继续递归,以找到”子树内所有set的最大值“的位置
关于这一做法的复杂度,可以均摊为总标记数,注意到前者下传标记至多增加$o(\log n)$个,即可得总复杂度为$o(n\log^{2}n)$(每一次操作还有set的$o(\log n)$)

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 #define L (k<<1)
5 #define R (L+1)
6 #define mid (l+r>>1)
7 priority_queue<int>S[N<<3];
8 int n,m,p,x,y,z,f[N<<3];
9 void up(int k){
10 if (S[k].empty())f[k]=max(f[L],f[R]);
11 else f[k]=max(max(f[L],f[R]),S[k].top());
12 }
13 void add(int k,int x){
14 S[k].push(x);
15 f[k]=max(f[k],x);
16 }
17 void del(int k){
18 S[k].pop();
19 up(k);
20 }
21 void down(int k){
22 if (!S[k].empty()){
23 add(L,S[k].top());
24 add(R,S[k].top());
25 S[k].pop();
26 }
27 }
28 void add(int k,int l,int r,int x,int y,int z){
29 if ((l>y)||(x>r))return;
30 if ((x<=l)&&(r<=y)){
31 add(k,z);
32 return;
33 }
34 add(L,l,mid,x,y,z);
35 add(R,mid+1,r,x,y,z);
36 up(k);
37 }
38 void del(int k,int l,int r,int x,int y,int z){
39 if ((l>y)||(x>r))return;
40 if ((x<=l)&&(r<=y)){
41 if (f[k]<z)return;
42 if ((!S[k].empty())&&(S[k].top()==z)){
43 del(k);
44 return;
45 }
46 }
47 del(L,l,mid,x,y,z);
48 del(R,mid+1,r,x,y,z);
49 up(k);
50 }
51 int query(int k,int l,int r,int x,int y){
52 if ((l>y)||(x>r))return -1;
53 if ((x<=l)&&(r<=y))return f[k];
54 down(k);
55 return max(query(L,l,mid,x,y),query(R,mid+1,r,x,y));
56 }
57 int main(){
58 scanf("%d%d",&n,&m);
59 memset(f,-1,sizeof(f));
60 for(int i=1;i<=m;i++){
61 scanf("%d%d%d",&p,&x,&y);
62 if (p==1){
63 scanf("%d",&z);
64 add(1,1,n,x,y,z);
65 }
66 if (p==2){
67 z=query(1,1,n,x,y);
68 if (z>=0)del(1,1,n,x,y,z);
69 }
70 if (p==3)printf("%d\n",query(1,1,n,x,y));
71 }
72 }
[luogu7476]苦涩的更多相关文章
- 苦涩的技术我该怎么学?Akka 实战
上次我们在“懵 B”的状态下,聊了聊 Actor 模型的理论知识.稍微再补充两句,如上图所示在 Actor 模型系统中,主要有互不依赖的 Actor 组成(图中圆圈),Actor 之间的通信是通过消息 ...
- P7476 苦涩 题解
Link 一道很好的复杂度均摊题目. 只需要考虑删除操作时的时间复杂度.保证复杂度的重点之一是精确定位到所有包含最大值的区间,即不去碰多余的区间.每次删除操作会删除若干个整个区间,以及至多两个区间被删 ...
- Flexbox 自由的布局
css3提出了一种新的布局方式.她并没有以摧枯拉朽之势博得我的喜爱.我和她的故事总是伴随着苦涩的味道.世道变了,总要做出些选择才能跟紧步伐.她很强大,能满足你天马行空的需求而不必抓掉一大把头发.她却很 ...
- This is US 我们的生活
温情暖心剧 看点在于真实,能让人找到不少共鸣像极了平淡而操蛋的生活,不断交织着苦涩和甘甜,柴米油盐.酸甜苦辣.嬉笑打闹.悲欢离合.温情又不尽如人意 this is us,our life 生活有如柠檬 ...
- 一篇通俗易懂的CSS层叠顺序与层叠上下文研究
网上有很多这方面的教程,但不是苦涩难懂就是从哪copy过来的,反正很长一段时间我是没看懂,时间长了也没打算去研究了,主要原因是,基本上很少会遇到那些问题(所以说啊,要是没有研究精神的才懒得管它).但自 ...
- Dog_Hybird的诞生
起因 开玩笑说“iOS搞不动了”,另外一方面iOS组的哥哥们给力,少一个我也妥妥的.又听闻web前端组来了一个不得了的人物,“老司机,带带我”这种机会不能错过,1个多月前就申请转web前端了.开始是苦 ...
- python基础-文件操作
一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异 ...
- Python之路,Day3 - Python基础3
一.文件操作 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- Python之路第一课Day3--随堂笔记(文件操作)
一.集合的介绍 1.集合操作 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = se ...
随机推荐
- 关于国密HTTPS 的那些事(二)
关于国密HTTPS 的那些事(二) 三. 需要解决的问题 前文我们了解了https,并梳理了国密https的流程.那么完成这些流程的目的是什么呢?又是怎么来保护数据的安全性呢?我们继续... 上文我们 ...
- C#开发BIMFACE系列41 服务端API之模型对比
BIMFACE二次开发系列目录 [已更新最新开发文章,点击查看详细] 在建筑施工图审查系统中,设计单位提交设计完成的模型/图纸,审查专家审查模型/图纸.审查过程中如果发现不符合规范的地方,则流 ...
- Java初步学习——2021.10.11每日总结,第六周周一
(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天继续学习菜鸟教程Java实例 字符串 9.字符串小写转大写--toUpperCase方法 public class Ma ...
- 【NOIP1998】 三连击 题解
文章转载前需和原作者联系,否则追究法律责任 题目链接:https://www.luogu.com.cn/problem/P1008 首先我们来分析一下题目.要求是枚举三个数,比例为1:2:3,且各个数 ...
- 题解 Christmas Game
题目传送门 题目大意 给出 \(t\) 个 \(n\) 个点 \(m\) 条边的无向图,每次可以从任意一棵树选择一条边删掉,然后该树不与根(为 \(1\) )联通的部分被删掉.不能操作的人输.问谁有必 ...
- 洛谷2805 [NOI2009]植物大战僵尸 (拓扑排序+最小割)
坚决抵制长题面的题目! 首先观察到这个题目中,我们会发现,我们对于原图中的保护关系(一个点右边的点对于这个点也算是保护) 相当于一种依赖. 那么不难看出这个题实际上是一个最大权闭合子图模型. 我们直接 ...
- 洛谷3703 SDOI2017树点涂色(LCT+线段树+dfs序)
又一道好题啊qwqqqq 一开始看这个题,还以为是一个树剖的什么毒瘤题目 (不过的确貌似可以用树剖啊) qwq这真是一道\(LCT\)维护颜色的好题 首先,我们来一个一个操作的考虑. 对于操作\(1\ ...
- JS最简单的定时累加计数器
js代码: 1 var timer , k = 0; 2 function star() { 3 k += 1; 4 document.getElementById("num"). ...
- 生产环境全链路压测平台 Takin
什么是Takin? Takin是基于Java的开源系统,可以在无业务代码侵入的情况下,嵌入到各个应用程序节点,实现生产环境的全链路性能测试,适用于复杂的微服务架构系统. Takin核心原理图 Taki ...
- FastAPI 学习之路(五十四)startup 和 shutdown
我们在实际的开发中呢,总会遇到这样的场景,我们想在启动或者终止的时候,做一些事情,那么应该如何实现呢,其实也是很简单.fastapi提供了这样的操作. 那么我们看下具体是怎么实现的呢 app = Fa ...