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 ...
随机推荐
- Avnet ZUBoard 1CG开发板上手—深度学习新选择
Avnet ZUBoard 1CG 开发板上手-深度学习新选择 摘要 本文主要介绍了 Avnet ZUBoard 1CG 开发板的特性.架构.硬件单元等概念,并对如何使用以太网接口和串口连接开发板进行 ...
- SMCA:港中文提出注意力图校准的DETR加速方案 | ICCV 2021
为了加速DETR收敛,论文提出了简单而有效的Spatially Modulated Co-Attention(SMCA)机制,通过在初始边界框位置给予较高的协同注意力响应值的约束来构建DETR的回归感 ...
- [天线原理及设计>基本原理] 2. 细线天线上的电流分配
2. 细线天线上的电流分配 为了说明线性偶极子上电流分布的产生及其随后的辐射,让我们首先从无损双线传输线的几何形状开始,如图1.15(a)所示. 电荷的运动沿每条导线产生幅度为I0/2的行波电流.当电 ...
- STM32F3, STM32F4编程手册
1. Cortex-M4的内核设备 NVIC, Nested vectored interrupt controller SCB, System control block SysTick, The ...
- elementui 修改合计行样式
<style scoped> /deep/.el-table .el-table__footer-wrapper .cell { text-align: right } </styl ...
- Docker学习11-Docker常规方式安装软件
本文咱们将通过按照Tomcat.按照MySQL.安装Redis这三个实战安装,来熟悉在docker中怎么安装软件,咱们使用端口映射,及数据卷的使用场景 安装的总体步骤: 1:搜索镜像: 2:拉取镜像: ...
- 【YashanDB知识库】virt虚拟内存远大于res内存问题分析
YASDB内存占用简介 参数配置: 默认参数配置:DBMS_PARAM高级包生成配置参数 数据库内存配置,使用默认参数步骤: 1.DBMS_PARAM.OPTIMIZE(); //生成默认参数,使用总 ...
- [python][selenium] Web UI自动化页面切换iframe框架
关联文章:Web UI自动化8种页面元素定位方式 1.切换iframe的方法:switch_to.frame 入参有4种: 1.1.id 1.2.name 1.3.index索引 1.4.i ...
- 5.5文件上传-WAF绕过
一.WAF绕过(明确有文件上传) 1.上传参数中,可修改参数 Content-Dispositin:一般可改 name:表单参数,不可更改 filename:文件名,可更改 Content-Type: ...
- 海光 FTPM 运行报错:Fapi_Provision_Finish() ErrorCode (0x00060025) No EK certificate found.
使用的是海光 CPU 提供的基于固件的 FTPM,错误原因是海光没有给 TPM 提供相应的 EK 证书.从而导致Fapi_Provision()接口无法通过证书的校验.关于Fapi_Provision ...