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:起航的更多相关文章

  1. webpack入坑之旅(四)扬帆起航

    这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...

  2. 柯南君:看大数据时代下的IT架构(5)消息队列之RabbitMQ--案例(Work Queues起航)

    二.Work Queues(using the Java Client) 走起   在第上一个教程中我们写程序从一个命名队列发送和接收消息.在这一次我们将创建一个工作队列,将用于分发耗时的任务在多个工 ...

  3. 柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航)

    柯南君:看大数据时代下的IT架构(4)消息队列之RabbitMQ--案例(Helloword起航) 二.起航 本章节,柯南君将从几个层面,用官网例子讲解一下RabbitMQ的实操经典程序案例,让大家重 ...

  4. 1.Magicodes.NET框架之路——起航

    1.Magicodes.NET框架之路--起航 前言 从事开发也好几年了,并且最近一直在做架构搭建的工作.这些时间,最大的感悟就是: 只有自己理解了的才是自己的. 对架构这块,若欲立之,必先破之. 故 ...

  5. 图数据库cayley+mongo的起航之旅

    图数据库,目前比较主流的可能是Neo4j以及cayley了.但是,由于Neo4j只有社区版是免费的,所以,选择cayley作为项目的最终选择! 今天就简单的介绍下,我的起航之旅. 1.安装go语言环境 ...

  6. C++小结:迟到的小结和重新起航的故事

    迟到的小结和重新起航的故事 有关这个学期的故事,随着这个学期的结束也划上了一个句号. 正如之前博客里面(还是空间里面)提到的,在这个过程中的收获比最后考试的结果更重要. 就像这次的计算器,也许会对最后 ...

  7. Linux实战教学笔记20:初级阶段结束,中级阶段起航

    第二十节 第一阶段结束第二阶段起航 标签(空格分隔): Linux实战教学笔记-陈思齐 一,承上 Linux实战教学笔记的基础核心能力阶段也就是第一阶段到此也就告一段落了.如果同学们能基本全都掌握,再 ...

  8. 4-c++教程起航篇-学习笔记

    c++教程起航篇 我们会讲C++那些事,C++与C语言的关系. C++诞生于贝尔实验室. C++之父: 本贾尼·斯特劳斯特卢普 C++社区排行榜 最新排行,c++排名第三,Python排名第四 C++ ...

  9. 【起航计划 002】2015 起航计划 Android APIDemo的魔鬼步伐 01

    本文链接:[起航计划 002]2015 起航计划 Android APIDemo的魔鬼步伐 01 参考链接:http://blog.csdn.net/column/details/mapdigitap ...

  10. Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航

    原文:Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航 经过前面的学习,Android Studio开发环境已准备OK,运行Android应用程序的原生模拟器和Ge ...

随机推荐

  1. 使用Kiota工具生成WebApi的代理类,以及接口调用的简单体验

    前言 当前.NET环境下,生成WebApi代理类的工具已经有很多选择了,比如OpenApi Generator,NSwag和Refitter等,不同的工具生成的代码风格以及实现方式略有不同,比如Ref ...

  2. TF-IDF 算法原理以及源码实现

    TF-IDF(Term Frequency-Inverse Document Frequency),是用来衡量一个词在文档中的重要性,下面看一下TDF-IDF的公式: 首先是TF,也就是词频,用来衡量 ...

  3. cdh6.3.2 hue集成hbase

    参考地址:https://blog.csdn.net/u010886217/article/details/98606976

  4. Go context 介绍

    在 Go 编程语言中,context 包提供了一个用于在 goroutine 之间传递上下文信息的方法.它通常用于控制 goroutine 的生命周期.传递请求范围内的数据.以及处理超时或取消信号.c ...

  5. Clobotics 计算机视觉场景存储实践:多云架构、 POSIX 全兼容、低运维的统一存储

    Clobotics 是一家将计算机视觉和机器学习技术应用于风电以及零售行业的企业.在风电行业,Clobotics 利用无人机对风力发电机叶片进行检查,显著降低了对人工作业的依赖.在零售领域,公司通过分 ...

  6. [kubernetes]使用kubeadm和containerd部署kubernetes

    前言 因宿主机内核版本限制和垂直伸缩特性的需要,安装的k8s版本为1.25,runtime为containerd,cni为calico. containerd.kubeadm.kubelet也可以用包 ...

  7. ComfyUI 基础教程(二) —— Stable Diffusion 文生图基础工作流及常用节点介绍

    上一篇文章讲解述首次启动 ComfyUI 会自动打开一个最基础的文生图工作流.实际上,后续我们可以通过菜单选项,或者快捷键 ctrl + D来打开这个默认工作流.默认工作流如下: 这是一个最基础的文生 ...

  8. FALCON:打破界限,粗粒度标签的无监督细粒度类别推断,已开源| ICML'24

    在许多实际应用中,相对于反映类别之间微妙差异的细粒度标签,我们更容易获取粗粒度标签.然而,现有方法无法利用粗标签以无监督的方式推断细粒度标签.为了填补这个空白,论文提出了FALCON,一种从粗粒度标记 ...

  9. C#阿里境外服务器部署企业邮箱发邮件代码

    static string accountName = "发件人邮箱"; static string password = "发件人邮箱密码"; static ...

  10. C#/.NET/.NET Core技术前沿周刊 | 第 5 期(2024年9.9-9.15)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...