摘要: 在数轴上维护一个线段集合S,支持两种操作: A l r:将S中所有与线段[l,r]相关的线段删除,并将[l,r]加入S中,需要输出删除个数。 B:查询S中元素数量。 分析:重载小于号,如果x小于y,那么x严格小于y,即x的右端点要小于y的左端点,这样定义相交的线段都是相等的,可以用set来找。 #i 阅读全文
posted @ 2024-07-14 18:09 chenfy27 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 有编号为1~T的T种颜色和一块长为L的色板,每块色板只有一个颜色,最初均为颜色1,有O次操作: C x y z,将区间[x,y]的色板涂成颜色z。 P x y,询问区间[x,y]有多少种不同的颜色。 范围:1<=L<=1e5, 1<=T<=30, 1<=O<=1e5。 分析:线段树维护区间内有哪些颜 阅读全文
posted @ 2024-07-14 14:11 chenfy27 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 给定n个整数的序列A,求存在多少个三元上升子序列,即满足i<j<k并且a[i]<a[j]<a[k]。 分析:用平衡树维护两侧元素,然后枚举中间元素即可。 #include <bits/stdc++.h> using llong = long long; template <typename TYPE 阅读全文
posted @ 2024-07-14 12:49 chenfy27 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 给定长度为n的序列A,有如下3种操作: 1 l r x,将区间[l,r]中的每个数都修改为x。 2 l r x,将区间[l,r]中的每个数都加上x。 3 l r,查询区间[l,r]内的最大值。 分析:设置2个懒标记,先处理赋值标记,再处理增加标记。 #include <bits/stdc++.h> 阅读全文
posted @ 2024-07-14 12:04 chenfy27 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 有n盏灯,从左到右编号依次为1~n,有m次操作: 1 a b,表示修改区间[a,b]内灯的状态。 2 a b,查询区间[a,b]内有多少盏灯是打开的。 初始时所有灯都是关着的。 分析:线段树维护区间内打开灯的数目,涉及到区间更新,要用懒标记。 #include <bits/stdc++.h> usi 阅读全文
posted @ 2024-07-14 11:59 chenfy27 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 有n个公园,小白对第i个公园的评分为A[i],有m次操作: 1 a b 表示在[a,b]范围内选择一段连续的公园遛狗; 2 a b 表示小白对公园a的评分修改为b; 对于操作1,输出可以取得的最大评分。 分析:线段树维护区间子段和。 #include <bits/stdc++.h> using ll 阅读全文
posted @ 2024-07-14 11:54 chenfy27 阅读(3) 评论(0) 推荐(0) 编辑