ABC343:起航
ABC343:起航
2024/3/2/22:53
有点儿晚了,简单总结一下。
前4题都很基础,一点点小思维,其中C题 边界又盲目追求刚刚好,WA了一次,总结经验,程序实际设计应该略微大于数据范围。
EFG开始就做不动了,只剩了20多分钟,先通读然后看E题,E题读了半天发现大概是体积交并反推位置,不会。。。看F题,能不能分块呢?可以尝试一下。最后选择写线段树,只需要维护一下最大值次大值就行。
建议下次从C题开始做。
F
维护最大值和次大值,麻烦的地方全在 pushup.简单来说有两点:
- 考虑被换掉的最大值能否更新次大值
- 考虑两个区间最大值相等的情况。次大值同理。
对此分讨即可。
注意 pushup 写成 node 类型,update 时的上传和query 时的合并写法略微不同,不要改了个返回值就反应不过来了。
#include<bits/stdc++.h>
#define F(i,l,r) for(int i=l;i<=r;++i)
#define G(i,r,l) for(int i=r;i>=l;--i)
using namespace std;
using ll = long long;
const int N=2e5+5;
struct node{
int sum,tot,mx,nx;
}tr[N<<2];
int n,q,a[N];
node pushup(node a,node b){
node c;
if(a.mx>b.mx){
c.sum=a.sum,c.mx=a.mx;
if(a.nx>b.mx) c.tot=a.tot,c.nx=a.nx;
else if(a.nx<b.mx) c.tot=b.sum,c.nx=b.mx;
else c.tot=a.tot+b.sum,c.nx=b.mx;
} else if(a.mx<b.mx){
c.sum=b.sum,c.mx=b.mx;
if(b.nx>a.mx) c.tot=b.tot,c.nx=b.nx;
else if(b.nx<a.mx) c.tot=a.sum,c.nx=a.mx;
else c.tot=b.tot+a.sum,c.nx=a.mx;
} else{
c.mx=a.mx,c.sum=a.sum+b.sum;
if(!a.nx && !b.nx) c.nx=c.tot=0;
else if(a.nx>b.nx) c.nx=a.nx,c.tot=a.tot;
else if(a.nx<b.nx) c.nx=b.nx,c.tot=b.tot;
else c.nx=a.nx,c.tot=a.tot+b.tot;
}
return c;
}
void update(int p,int l,int r,int x,int k){
if(l==r){
tr[p].mx=k;
tr[p].sum=1;
return ;
}
int mid=(l+r)>>1;
if(x<=mid) update(p*2,l,mid,x,k);
else update(p*2+1,mid+1,r,x,k);
tr[p]=pushup(tr[p*2],tr[p*2+1]);
}
node query(int p,int l,int r,int x,int y){
if(x<=l && r<=y) return tr[p];
int mid=(l+r)>>1;
node z=(node){0,0,0,0};
if(x<=mid) z=pushup(z,query(p*2,l,mid,x,y));
if(y>mid) z=pushup(z,query(p*2+1,mid+1,r,x,y));
return z;
}
signed main(){
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>q;
F(i,1,n<<2) tr[i]=(node){0,0,0,0};
F(i,1,n) {
cin>>a[i];
update(1,1,n,i,a[i]);
}
int op,x,y;
F(i,1,q){
cin>>op>>x>>y;
if(op==1){
update(1,1,n,x,y);
}
else {
node z=query(1,1,n,x,y);
cout<<z.tot<<'\n';
}
}
return 0;
}
ABC343:起航的更多相关文章
- webpack入坑之旅(四)扬帆起航
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- 柯南君:看大数据时代下的IT架构(5)消息队列之RabbitMQ--案例(Work Queues起航)
二.Work Queues(using the Java Client) 走起 在第上一个教程中我们写程序从一个命名队列发送和接收消息.在这一次我们将创建一个工作队列,将用于分发耗时的任务在多个工 ...
- 柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航)
柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航) 二.起航 本章节,柯南君将从几个层面,用官网例子讲解一下RabbitMQ的实操经典程序案例,让大家重 ...
- 1.Magicodes.NET框架之路——起航
1.Magicodes.NET框架之路--起航 前言 从事开发也好几年了,并且最近一直在做架构搭建的工作.这些时间,最大的感悟就是: 只有自己理解了的才是自己的. 对架构这块,若欲立之,必先破之. 故 ...
- 图数据库cayley+mongo的起航之旅
图数据库,目前比较主流的可能是Neo4j以及cayley了.但是,由于Neo4j只有社区版是免费的,所以,选择cayley作为项目的最终选择! 今天就简单的介绍下,我的起航之旅. 1.安装go语言环境 ...
- C++小结:迟到的小结和重新起航的故事
迟到的小结和重新起航的故事 有关这个学期的故事,随着这个学期的结束也划上了一个句号. 正如之前博客里面(还是空间里面)提到的,在这个过程中的收获比最后考试的结果更重要. 就像这次的计算器,也许会对最后 ...
- Linux实战教学笔记20:初级阶段结束,中级阶段起航
第二十节 第一阶段结束第二阶段起航 标签(空格分隔): Linux实战教学笔记-陈思齐 一,承上 Linux实战教学笔记的基础核心能力阶段也就是第一阶段到此也就告一段落了.如果同学们能基本全都掌握,再 ...
- 4-c++教程起航篇-学习笔记
c++教程起航篇 我们会讲C++那些事,C++与C语言的关系. C++诞生于贝尔实验室. C++之父: 本贾尼·斯特劳斯特卢普 C++社区排行榜 最新排行,c++排名第三,Python排名第四 C++ ...
- 【起航计划 002】2015 起航计划 Android APIDemo的魔鬼步伐 01
本文链接:[起航计划 002]2015 起航计划 Android APIDemo的魔鬼步伐 01 参考链接:http://blog.csdn.net/column/details/mapdigitap ...
- Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航
原文:Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航 经过前面的学习,Android Studio开发环境已准备OK,运行Android应用程序的原生模拟器和Ge ...
随机推荐
- SMU Summer 2024 Contest Round 4
SMU Summer 2024 Contest Round 4 Made Up 题意 给你三个序列 \(A,B,C\) ,问你满足 \(A_i = B_{C_j}\) 的 \((i,j)\) 对有多少 ...
- SMU Summer 2023 Contest Round 15
SMU Summer 2023 Contest Round 15 A. AB Balance 其实就只会更改一次 #include <bits/stdc++.h> #define int ...
- SMU Summer 2023 Contest Round 13
SMU Summer 2023 Contest Round 13 A. Review Site 我们总是可以把差评放到另一个服务器,好评和中立放另一个,这样最多投票数就是好评与中立数 #include ...
- 华为交换机S5700-52C-EI配置以太网和snmp服务
配置以太网 通过超级终端Hyper Terminal和console串口线链接华为交换机 # 用超级终端打开,配上串口线,用9600波特率链接 system-view interface Vlanif ...
- 【Mac】之安装VM虚拟机并安装centos7系统
参考文章:<Mac 安装VMware Fusion虚拟机> 一.安装VMware Fusion 首先下载Mac版VMware虚拟机: 链接:https://pan.baidu.com/s/ ...
- Json转实体类问题
背景:使用一个实体类,将json及xml转成对应的实体类 Transformers.fromJson 将json映射成对应的实体类, 原本已经测试,传xml是可以的,传的有字段及list<E&g ...
- .NET 9 中 LINQ 新增的功能
LINQ介绍 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称.数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持.此外,需要针对每种 ...
- 个头小却很能“打”!合合信息扫描全能王推出A4便携式打印机
个头小却很能"打"!合合信息扫描全能王推出A4便携式打印机 过去,为了打印一份清晰工整的材料,人们往往需要到专门的打印店或办公室.处理文件.对于销售.物流人员.工程师.医生.媒 ...
- mongo查看服务状态
转载请注明出处: 查看数据库列表 show dbs 查看当前数据库 db 查看集合列表 show collections 查看数据库的状态 db.stats() 查看集合的状态 db.collecti ...
- Java项目笔记(五)
这里写目录标题 @Valid 失效 解析jwt 无法建立SSL连接 windows下打jar包,读取nacos 配置文件 异常 @Valid 失效 加入以下依赖 <dependency> ...