codeforces 739c Alyona and towers

codeforces编程网站预测分数插件.zip codeforces编程网站预测分数插件 立即下载
题意
给定一个序列,求最长的严格先递增后递减区间长度。有m次区间加修改,每次修改后输出答案。
思路
线段树。diff[i] = a[i] - a[i - 1],diff[1] = 0.这样每次的区间加就就变成了单点修改,即l点加k,r+1点减k。
需要注意当l为1或者r为n时无需修改。
代码
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxnum = 3 * 101000;
long long maxn[4*maxnum],lnmax[4*maxnum],lpnmax[4*maxnum],rpmax[4*maxnum],rpnmax[4*maxnum];
long long diff[2*maxnum];
int a[2*maxnum],n,m;
void pushup(int o,int l,int r){
    int mid = (l + r)/2;
    maxn[o] = max(maxn[o << 1],max(maxn[o << 1|1],max(rpmax[o << 1] + lpnmax[o << 1|1],rpnmax[o << 1] + lnmax[o << 1|1])));
    lnmax[o] = lnmax[o << 1]==(mid - l + 1)?mid - l + 1 + lnmax[o << 1|1]:lnmax[o << 1];
    lpnmax[o] = lpnmax[o << 1]==(mid - l + 1)?mid - l + 1 + lnmax[o << 1|1]:lpnmax[o << 1];
    if(rpmax[o << 1]== mid - l + 1) lpnmax[o] = max(lpnmax[o],rpmax[o << 1] + lpnmax[o << 1|1]);
    rpmax[o] = rpmax[o << 1|1]==(r - mid )?r - mid + rpmax[o << 1]:rpmax[o << 1|1];
    rpnmax[o] = rpnmax[o << 1|1]==(r - mid)?r - mid + rpmax[o << 1]:rpnmax[o << 1|1];
    if(lnmax[o << 1|1] ==r - mid) rpnmax[o] = max(rpnmax[o],rpnmax[o <<1] + lnmax[o << 1|1]);
}

void change(int o,int l){
    if(diff[l] == 0) maxn[o] = lnmax[o] = lpnmax[o] = rpmax[o] = rpnmax[o] = 0;
    else if(diff[l] > 0){
        lnmax[o] = 0;
        rpnmax[o] = lpnmax[o] = maxn[o] = rpmax[o] = 1;
    }
    else{
        rpmax[o] = 0;
        maxn[o] = lpnmax[o]= lnmax[o] = rpnmax[o] = 1;
    }
}

void build(int o,int l,int r){
    if(l == r){
        change(o,l);
        return ;
    }
    int mid = (l + r)/2;
    build(o << 1,l,mid);
    build(o << 1|1,mid + 1,r);
    pushup(o,l,r);
}

void update(int o,int l,int r,int k,int pos){
    if(l == r){
        diff[pos] += k;
        change(o,pos);
        return;
    }
    int mid = (l + r)/2;
    if(pos <= mid) update(o<<1,l,mid,k,pos);
    else update(o << 1|1,mid + 1,r,k,pos);
    pushup(o,l,r);
}
int main(){
    scanf("%d",&n);
    for(int i = 1;i <= n;i ++){
        scanf("%d",&a[i]);
        diff[i] = i == 1?0:a[i] - a[i - 1];
    }
    build(1,1,n);
    scanf("%d",&m);
    int l,r,k;
    for(int i = 1;i <= m;i ++){
        scanf("%d%d%d",&l,&r,&k);
        if(l != 1 )update(1,1,n,k,l);
        if(r != n) update(1,1,n,-k,r + 1);
        //printf("\n");
        printf("%lld\n",maxn[1] + 1);
    }
    return 0;
}
一个Codeforces、牛客竞赛、AtCoder平台的编程竞赛查询插件,ACMer必备.zip 立即下载

相关推荐

BarTender破解版风险与低成本正版替代方案全解析

在工业自动化和企业信息化领域,标签打印与条形码技术是连接物理世界与数字系统的关键环节。其核心原理是通过软件驱动打印设备,将可变数据(如序列号、生产日期)与固定模板结合,生成可追溯的标识载体。这项技术的价值在于实现生产流程可视化、供应链管理精细化与质量控制自动化,广泛应用于仓储物流、制造执行、零售门店等场景。然而,软件授权合规性常成为企业成本控制的痛点,尤其面对BarTender这类行业标准工具时,部分用户可能寻求破解方案。但破解版软件通常采用内存补丁、伪造许可证等技术手段绕过验证,不仅存在法律风险,更会引发

weixin_32736961的博客 738

Codeforces Round #381 Div.2

A:Alyona and copybooks 题目大意:已经给了你n本书,你可以选择花a元买一本书,花b元买两本书(严格两本),花c元买三本书(严格三本),让你花最少的钱买x本书使得n+x为4的倍数。 思路:枚举一下买一本书,两本书,三本书的次数,然后统计答案即可。 #include<cmath> #include<cstdio> #include&...

V469584691的博客 295

微信小程序使用ucharts折线图,有负数显示0刻度线

当数据有负数和正数的时候默认不会显示0刻度线,不方便看出正负对比。

欢迎来到我的博客!在这里,我将分享我在前端开发方面的知识和经验。让我们一起探索前端开发的无限可能! 1581

【CodeForces】- 739C Alyona and towers

Alyona has built n towers by putting small cubes some on the top of others. Each cube has size 1 × 1 × 1. A tower is a non-zero amount of cubes standing on the top of each other. The towers are next to

Pure_W的博客 737

【Android】条形码/二维码扫描——ZXing源码分析

正在更新中 针对3.2.1版本源码 与其他版本代码可能会有出入,但核心思想基本不变。 首先从com.google.zxing.client.android包中的目录结构分析:Book:这个文件夹中有5个类: BrowseBookListener 实现了adapter的点击事项响应,通过获取ISBN,然后跳转到Google books中查询响应的详细信息。 SearchBookContents

年轻的学徒 2453

RealSense D455启动教程

RealSense D455启动教程 修改rs_camera.launch

每天进步一点点 2417

线段树 codeforces Alyona and towers 739C

今天在CF上面看到一个题目,是有关线段树的。好久没有写过线段树,基本都已经忘完。没办法,后来只得看了网上的题解。写下这篇博客,总结一下线段树的操作,便于以后学习,复习。线段树主要树用来维护区间信息,快速的更新与查询的数据结构,在运用过程中,需要根据具体情况,判断出需要维护的信息,达到快速查询,更新的效果。与它的功能对应,线段树的操作主要是更新和查询,当然还有建树(建树类类似于更新)对应的代码中,也

ZT在努力 683

SpringBoot 通过 JMS 集成 IBM MQ

IBM MQ 作为老牌的企业级消息中间件,虽然在当下云原生时代已不再是主流选择,但在金融、银行、保险等传统行业的核心业务系统中仍然占据着重要地位。这些行业对系统的稳定性、可靠性和事务一致性有着极高的要求,IBM MQ 正是在这些方面表现出色。尽管近年来 RabbitMQ、Apache Kafka 等新一代消息中间件在新兴项目中更受欢迎,但许多金融公司和大型企业仍在使用 IBM MQ 作为核心业务系统的消息传递基础设施。

小单的博客专栏 952

Alyona and towers CodeForces - 739C (线段树)

大意: 给定序列, 要求实现区间加, 询问整个序列最长的先增后减的区间. 线段树维护左右两端递增,递减,先增后减的长度即可, 要注意严格递增, 合并时要注意相等的情况, 要注意相加会爆int. #include <iostream> #include <random> #include <algorithm> #include...

weixin_30609331的博客 180

FitzHugh-Nagumo 模型连续-MATLAB仿真

【代码】FitzHugh-Nagumo 模型连续-MATLAB仿真。

qq_43688618的博客 882

记录:解决Ubuntu20.04安装ros报错E: Unable to locate package ros-kinetic-desktop-full【亲测有效】

报错:E: Unable to locate package ros-kinetic-desktop-full.尝试好久一直都无法下载,最后得知真相的我眼泪哗哗的直流。

**My Coding Family** 6万+

Codeforces 739C.Alyona and towers (线段树/非递归线段树)

题目链接:http://codeforces.com/contest/739/problem/C 题意:给定30万个正整数,和30万个操作,每次操作后输出查询结果。 操作:每次把从L到R的数都加上D 查询:最宽的Hill的宽度。定义:先递增后递减的连续n个数称作宽度为n的Hill。

岩之痕 2073

23、视频时间码与数字同步技术详解

本文深入解析了视频时间码与数字同步技术的核心原理及应用。涵盖线性时间码(LTC)和垂直间隔时间码(VITC)的结构与特性,详细阐述了降帧时间码的补偿机制及其在影视制作中的重要性。文章还介绍了定时参考信号(TRS)在SDTV和HDTV中的实现方式,分析了辅助数据的传输结构与发展趋势,并探讨了SDI编码技术及其在不同视频标准下的差异。通过实际应用场景和技术发展影响的剖析,全面展示了这些关键技术如何支撑现代视频系统的高效运行与持续创新。

wine的专栏 239

CodeForces 739C Alyona and towers

题目大意 给定一个长度为n的序列a和m个操作,每个操作将[L,R]的元素加上d。 每次操作完后询问序列a中最长的连续子序列满足al<al+1<...<ax>...>ar−1>ar的长度是多少。 Data Constraint n,m≤3×10^5

Akakii的博客 1462

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Codeforces 739C Alyona and towers 线段树

Alyona and towers 这个题写起来真的要人命。。。 我们发现一个区间被加上一个d的时候, 内部的结构是不变的, 改变的只是左端点右端点的值, 这样就能区间合并了。 如果用差分的话会简单一些, 就变成了求前一段是负数,后一段是正数的最长段多长。 #include<bits/stdc++.h> #define LL long long #define fi f...

weixin_30315435的博客 143

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

B - Alyona and towers CodeForces - 739C

链接: https://vjudge.net/contest/202699#problem/B 题意: 给出一个序列,要支持区间加和操作 求其中最长的区间,该区间内的元素满足(ai<ai+1<。。。ak>ak+1>。。>aj-1>aj) 要支持区间加值 题解: 是一个很经典的差分 对于相邻两项要判断大小只需看差分数组即可 而对于区间修改,只需对...

weixin_30617797的博客 99

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[Codeforces div1] Round 739C. Alyona and towers 线段树+差分数组

这题应当有很多做法 拿到题目以后有很多想法,光是不同的线段树就有两三种,而且我觉得分块卡一卡也是能卡过去的。 最后写了最简单的方法,代码比起其它的解法都短很多。 考虑查分后的数组,原问题变可以转化成求最长的一段正数后紧接一段负数的长度。 若用折线将这串数字连接起来,那么每一段“合唱队形”数便可以表示成两个波谷之间的距离。 线段树维护所有的波谷,维护最大的两个波谷之间的距离。 修

HbFS- 651

做题记录

//记一下值得记的 //20170121 POJ3667 Hotel(线段树区间合并) //线段树基本思想 //区间合并基本思想 cf739C Alyona and towers(线段树区间合并) //想好线段树结点维护的值,处理好区间合并的UP函数,各个函数想清楚了再写

358

codeforces 739C 线段树的高级应用

题意,给你一个序列,有q次操作,每次对一个区间进行加值,同时要输出 最长的上升序列/下降序列/先上升再下降序列很明显能想到的是利用线段树维护,有很明显的能想到要维护线段树的每个区间的左边界和右边界的值,并且每个点都有维护四种变化的值,然后就懵逼了。 这时候应该想到的是维护每个区间的左右边界的四种情况进行拼凑来更新 一开始想到的是单峰,对于多峰没想到如何维护,其实也是很简单,有点类似拼图或者插头d

黑码 956

Codeforces 739C 线段树 区间合并问题

网上搜到的解法,总结下自己学到的东西 1. 以前也写过类似的线段树,不过当时没有 区间合并问题这个概念,可能那道题比较裸,大概写一下也就过了,没学到什么。这道题让我知道线段树还能解决一类区间合并问题,学习了这类线段树的公式化?写法。 2. 将高度数组转化为一个高度的差值数组,优点是题目给出一次更改,只要在线段树中做两次单点更新就好了。 这也是我第一次根据数组建树完后,每次更新还需要修改数组内

lchi1997的博客 726

codeforces739e绝对的干货题解!!!!!

    首先我们考虑所有期望由什么情况组成。 1.单独用a类型的球。2.单独用b类型的球。3 a类型和b类型一起用. 然后dp的话很容易想出一个o(n^3)的算法。。。f[n][a][b]前n个怪兽我们用a 个a球,b个b球得到的期望。太慢~~~~~~~虽然能过2333333333333. 之所以慢的原因是分量太多,那能不能合一起些呢? 比如(单独用a和a,b一起用算一类) (单独用b...

guoshiyuan484的博客 1614

codeforces Towers 题解

Little Vasya has received a young builder’s kit. The kit consists of several wooden bars, the lengths of all of them are known. The bars can be put one on the top of the other if their lengths are the

靖空间 1634

[CF739C]Alyona and towers

Alyona and towers 题解 很冗杂的一道题。 思路其实是很容易想到的,毕竟就是一道线段树板子题。 我们可以通过线段树来维护每一个区间的符合要求的最长子串长度,最长向左端点递增子串长度,递减子串长度,先递增再递减子串长度,以及向右端点的以上三个操作的长度。 每次操作在线段树上修改一个区间,每次合并区间时更新出当前区间的值。 但我们发现如果还要区间相加带懒标记的话就太麻烦了,于是我们考虑差分,这样判断递增与递减时就只需要判断一个点的正负性了,而且每次修改时只用修改左右端点两个点,方便了许多。 但总

StaroForgin的博客 307

Codeforces Round #381 (Div. 2) E. Alyona and towers 差分+ 线段树并

题意:给你一个数列,m个操作每次修改一段区间,问每次修改后数列的最长山峰(al < al + 1 < al + 2 < ... < ak > ak + 1 > ak + 2 > ... > ar.)、参考http://blog.youkuaiyun.com/dormousenone/article/details/53363374分析针对区间修改及维护的问题,很容易想到线段树。可以想到al<al+1<al+2<

now_ing的博客 350

Codeforces Round #381 (Div. 2) E. Alyona and towers

Codeforces Round #381 (Div. 2) E. Alyona and towersDescriptionAlyona has built n towers by putting small cubes some on the top of others. Each cube has size 1 × 1 × 1. A tower is a non-zero amount of c

DorMOUSENone的博客 585
上一篇: codeforces 735d Taxes
下一篇: codeforces 742c Arpa's loud Owf and Mehrdad's evil plan
highkill
博客等级 码龄12年 0粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值