[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 ...
随机推荐
- 如何发现 Kubernetes 中服务和工作负载的异常
大家好,我是来自阿里云的李煌东,今天由我为大家分享 Kubernetes 监控公开课的第二节内容:如何发现 Kubernetes 中服务和工作负载的异常. 本次分享由三个部分组成: 一.Kuberne ...
- SpringBoot之网站的登陆注册逻辑
网站的登录注册实现逻辑 该文章主要是为了整理之前学习项目中的知识点,并进行一定程度的理解. 技术列表: SpringBoot MySQL redis JWT 用户登录逻辑: 首先打开前端登录页面,F1 ...
- 3D Analyst Tools(3D Analyst 工具)
3D Analyst 工具 工具里有又细分如下分类: 注:以下代码的参数需要另行配置,不能直接执行:Python2不支持中文变量! 1.3D 要素 # Process: 3D 内部 arcpy.Ins ...
- Kubernetes List-Watch 机制原理与实现 - chunked
概述http chunkedwatch api 概述 Kubernetes 中主要通过 List-Watch 机制实现组件间的异步消息通信,List-Watch 机制的实现原理值得深入分析下 . 在 ...
- UE4蓝图AI角色制作(四)之Gameplay调试器
8. 寻路网格体和Gameplay调试器 为了及时识别出AI系统中的导航问题,UE4提供了一个工具用来解决这类问题,它叫Gameplay调试器.打开项目设置,在左侧找到"引擎",然 ...
- webRTC中语音降噪模块ANS细节详解(二)
上篇(webRTC中语音降噪模块ANS细节详解(一))讲了维纳滤波的基本原理.本篇先给出webRTC中ANS的基本处理过程,然后讲其中两步(即时域转频域和频域转时域)中的一些处理细节. ANS的基本处 ...
- Go语言核心36讲(Go语言进阶技术五)--学习笔记
11 | 通道的高级玩法 我们已经讨论过了通道的基本操作以及背后的规则.今天,我再来讲讲通道的高级玩法. 首先来说说单向通道.我们在说"通道"的时候指的都是双向通道,即:既可以发也 ...
- django 中的hello word 开心,通过申请博客了,,发个随笔庆祝一下~~~~~~~
django 中的hello word! 准备:[pymsql,pycharm,django3.0.7] >>>终端中:django-admin.py startproject [项 ...
- spring源码分析(二)- 容器基础
1.基本用法 用过Spring的都知道,bean是Spring中最基础也是最核心的.首先看一个简单的例子. 一个类和一个配置文件 package bean; public class MyBean { ...
- UltraSoft - Beta - 设计与计划
在DDL Killer的Alpha发布版本一周后,我们积累了一定的用户数量和用户反馈,同时也着手准备Beta阶段的继续开发,在正式开始迭代前,先对我们的Beta阶段的需求做一个统计和预估,一是保证工作 ...