【2020NOI.AC省选模拟#7】C. 逃课
题目链接
原题解:
我们需要找出两个距离不超过$k-1$的位置,使他们的和尽量大。
被修改过得位置比较少,所以我们可以先求出连个位置都没有被修改过的答案,然后只关心那些涉及到至少一个被修改过的位置的方案。
我们可以对每个位置维护一个multiset,表示可以和当前位置同时选择的被修改过的位置的值的集合。
我们需要知道每个位置本来的值加上multiset的最大值的最大值。
由于修改某个位置是需要在这个位置左右两边的两个区间的multiset中同时插入或删除一个值,我们可以用线段树维护集合,某个区间的节点上的multiset中的元素代表这个区间中每个multiset里都有一个当前元素。
我们还需要维护区间最大值。
由于每次修改最多引起$O(\log N)$次multiset操作,复杂度为$O(n+q\log ^2 n)$。
补充:
用STL来帮助做树套树。只用存修改后的值。
代码(100分):

#include<cstdio>
#define M 3700001
#define N 2097152
inline int min(int u,int v){return u<v?u:v;}
inline int max(int u,int v){return u<v?v:u;}
int a[N],b[M],c[M],d[M],e[N],f[N],g[N],m,n,p,q,t;
inline void add(int u,int v,int w){b[++t]=a[u],c[a[u]=t]=v,d[t]=w;}
inline void up(int u){g[u]=max(g[u<<1],g[u<<1|1]);}
inline void modify(int u,int v){for(g[u|=m]=v;u>>=1;up(u));}
inline int query(int u,int v)
{
int w=0;
for(u+=m-1,v+=m+1;u^v^1;u>>=1,v>>=1)
{
if(~u&1)w=max(w,g[u^1]);
if(v&1)w=max(w,g[v^1]);
}
return w;
}
inline void add(int u,int v,int x,int y)
{
for(u+=m-1,v+=m+1;u^v^1;u>>=1,v>>=1)
{
if(~u&1)add(u^1,x,y);
if(v&1)add(v^1,x,y);
}
}
void dfs(int u,int v)
{
for(int i=a[u];i;i=b[i])v=max(v,d[i]+query(max(1,c[i]-p+1),min(n,c[i]+p-1))),modify(c[i],d[i]);
u<m?dfs(u<<1,v),dfs(u<<1|1,v),0:q<(u^m)?0:printf("%d\n",v);
for(int i=a[u];i;i=b[i])modify(c[i],0);
}
int i,u,v,w;
int main()
{
for(scanf("%d%d%d",&n,&p,&q),m=1;m<n+2||m<=q;m<<=1);
for(i=1;i<=n;i++)scanf("%d",e+i);
for(i=1;i<=q;i++)scanf("%d%d",&u,&v),add(f[u],i-1,u,e[u]),e[u]=v,f[u]=i;
for(i=1;i<=n;i++)f[i]?add(f[i],q,i,e[i]):add(1,i,e[i]);
return dfs(1,0),0;
}
【2020NOI.AC省选模拟#7】C. 逃课的更多相关文章
- NOI.AC省选模拟赛第一场 T1 (树上高斯消元)
link 很容易对于每个点列出式子 \(f_{x,y}=(f_{x,y-1}+f_{x,y}+f_{x,y+1}+f_{x+1,y})/4\)(边角转移类似,略) 这个转移是相互依赖的就gg了 不过你 ...
- [NOI.AC省选模拟赛3.31] 星辰大海 [半平面交]
题面 传送门 思路 懒得解释了......也是比较简单的结论 但是自己看到几何就退缩了...... 下周之内写一个计算几何的学习笔记! Code #include<iostream> #i ...
- [NOI.AC省选模拟赛3.31] 附耳而至 [平面图+最小割]
题面 传送门 思路 其实就是很明显的平面图模型. 不咕咕咕的平面图学习笔记 用最左转线求出对偶图的点,以及原图中每个边两侧的点是谁 建立网络流图: 源点连接至每一个对偶图点,权值为这个区域的光明能量 ...
- [NOI.AC省选模拟赛3.30] Mas的童年 [二进制乱搞]
题面 传送门 思路 这题其实蛮好想的......就是我考试的时候zz了,一直没有想到标记过的可以不再标记,总复杂度是$O(n)$ 首先我们求个前缀和,那么$ans_i=max(pre[j]+pre[i ...
- [NOI.AC省选模拟赛3.23] 染色 [点分治+BFS序]
题面 传送门 重要思想 真的是没想到,我很久以来一直以为总会有应用的$BFS$序,最终居然是以这种方式出现在题目中 笔记:$BFS$序可以用来处理限制点对距离的题目(综合点分树使用) 思路 本题中首先 ...
- [NOI.AC省选模拟赛3.23] 集合 [数学]
题面 传送门 一句话题意: 给定$n\leq 1e9,k\leq 1e7,T\leq 1e9$ 设全集$U=\lbrace 1,2,3,...n\rbrace $,求$(min_{x\in S}\lb ...
- [noi.ac省选模拟赛]第12场题解集合
题目 比赛界面. T1 数据范围明示直接\(O(n^2)\)计算,问题就在如何快速计算. 树上路径统计通常会用到差分方法.这里有两棵树,因此我们可以做"差分套差分",在 A 树上对 ...
- [noi.ac省选模拟赛]第10场题解集合
题目 比赛界面. T1 不难想到,对于一个与\(k\)根棍子连接的轨道,我们可以将它拆分成\(k+1\)个点,表示这条轨道不同的\(k+1\)段. 那么,棍子就成为了点与点之间的边.可以发现,按照棍子 ...
- [noi.ac省选模拟赛]第11场题解集合
题目 比赛界面. T1 比较简单.容易想到是求鱼竿的最大独立集.由于题目的鱼竿可以被分割为二分图,就可以想到最大匹配. 尝试建边之后会发现边的数量不小,但联系题目性质会发现对于一条鱼竿,它 ...
- [noi.ac省选模拟赛20200606]赌怪
题目 点这里看题目. 分析 先特判掉\(K=2\)的情况. 首先可以考虑到一个简单 DP : \(f(i)\):前\(i\)张牌的最大贡献. 转移可以\(O(n^2)\)地枚举区间 ...
随机推荐
- vi 自增
(1). 建立第一个列表项.确保它以数字开始.(2). qa - 用寄存器 'a' 开始记录(3). Y - 抽出这个列表项(4). p - 把该项的一个副本放置在下一行上(5). CTRL-A - ...
- Java集合-Set接口
Set接口-介绍 Set接口的定义如下: Set是一个继承于Collection的接口,即Set也是集合中的一种.Set是没有重复元素的集合.即: Set 接口:无序,不支持索引,不可重复的集合 Se ...
- float高度塌陷和BFC
开启BFC方式: 1.设置浮动float(副作用比较大,不推荐) 2.将元素设置为行内块元素 display:inline-block:(不推荐) 3.将元素的overlfow设置为非visible的 ...
- Git Commit Rule
## git commit tagfeat: 新功能fix: 修复问题docs: 修改文档style: 修改代码格式,不影响代码逻辑refactor: 重构代码,理论上不影响现有功能perf: 提升性 ...
- iOS系统自带的扫码功能(二维码+条形码+识别本地图片)
扫码采用类库:AVFoundation 1.相关权限 1).需要在info.plist中添加以下权限:Privacy - Camera Usage Description(使用摄像机的权限说明) 2) ...
- 快速傅里叶变换详解(FFT)
自己也看了几篇博客,但是对我这种不擅长推导小白来说还是有一点困难,所以自己也写一篇博客也为像我一样的小白提供思路.以下内容包含各种LaTeX渲染,如果哪里有错误欢迎大家评论留言,或者添加本人qq:14 ...
- 【服务器数据恢复】VSAN节点容量盘故障离线的数据恢复案例
VSAN简介:VSAN是以vSphere内核为基础开发,可以扩展使用的分布式存储架构.该架构在vSphere集群主机中安硬盘及闪存构建VSAN存储层,通过存储进行管理与控制,最终形成一个共享存储层.V ...
- eFuse技术
1. 基本概况及介绍 不同于大多数FPGA使用的SRAM阵列,eFuse一次只有一根熔丝能够被编程,这是该方法的配置能力存在限制范围的原因.但当与日益成熟的内置自测试(BIST)引擎组合使用时,这 ...
- IBM服务器的2种IMM和1种raid管理方式
IMM两种进入方式和Raid管理软件 前面板IMM管理接口: 用网线连接服务器前置面板的管理接口到其他 PC 或笔记本,然后 PC 或笔记本的 IP 地址配置为 192.168.70.0/24 ...
- sshpass免密登录源码剖析
源码下载地址:https://sourceforge.net/projects/sshpass/ 免密登陆程序sshpass源码解析,短小精悍的程序,非常值得学习!