2024杭电多校3——1007单峰数列

news2024/11/14 5:24:54

补题链接

在这里插入图片描述
一道数据结构体,差分+线段树,我从没有看见过的全新版本,不过据说挺常见的。线段树维护题目里询问的东西,是否一样,单调还有单峰,小细节挺多的。建线段树开始是从2开始的,因为差分的第一个元素是 a 1 a_1 a1,同理,询问的时候也要是 l + 1 l+1 l+1,更新只需要更新两个点即可,注意询问的区间范围,还有一点就是如果询问的区间长度是1的话直接特判掉。

#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
using i128 = __int128;
#define ios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using state = array<bool,4>;//0是否一样,1是否增,2是否减,是否单峰 0否1是

const int maxn = 1e5+10;
int n,m;
i64 a[maxn],b[maxn];
state tree[maxn<<2];

state unite(state a,state b){
    state ans;
    ans[0] = a[0]&b[0];
    ans[1] = a[1]&b[1];
    ans[2] = a[2]&b[2];
    ans[3] = (a[1]&b[2]) | (a[1]&b[3]) | (a[3]&b[2]);
    return ans;
}

void pushup(int p,int l,int r){
    tree[p] = unite(tree[p*2],tree[p*2+1]);
}

void build(int p,int l,int r){
    if(l==r){
        if (b[l] == 0) tree[p][0] = 1;
        else if (b[l] > 0) tree[p][1] = 1;
        else tree[p][2] = 1;
        return;
    }
    int mid = (l+r)>>1;
    build(p*2,l,mid);
    build(p*2+1,mid+1,r);
    pushup(p,l,r);
}

void update(int p,int l,int r,int x,int num){//只要更新一个点即可
    if(l==r){
        b[l]+=num;
        tree[p][0]=tree[p][1]=tree[p][2]=tree[p][3]=0;
        if(b[l]==0) tree[p][0]=1;
        else if(b[l]>0) tree[p][1] = 1;
        else tree[p][2]=1;
        return;
    }
    int mid = (l+r)>>1;
    if(x<=mid)update(p*2,l,mid,x,num);
    else update(p*2+1,mid+1,r,x,num);
    pushup(p,l,r);
}

state query(int p,int l,int r,int x,int y){
    if(x<=l&&r<=y) return tree[p];
    int mid = (l+r)>>1;
    if(y<=mid) return query(p*2,l,mid,x,y);
    else if(x>mid) return query(p*2+1,mid+1,r,x,y);
    else return unite(query(p*2,l,mid,x,mid),query(p*2+1,mid+1,r,mid+1,y));
}

signed main(){
    ios;
    cin>>n;
    for(int i = 1;i<=n;++i){
        cin>>a[i];
        b[i] = a[i]-a[i-1];
    }
    build(1,2,n);
    cin>>m;
    while(m--){
        int op,l,r,x;
        cin>>op>>l>>r;
        if(op==1){
            cin>>x;
            if(l>1) update(1,2,n,l,x);
            if(r<n) update(1,2,n,r+1,-x);
        }else if(op==2){
            if(l==r){
                cout<<"1\n";
                continue;
            }
            cout<<query(1,2,n,l+1,r)[0]<<"\n";
        }else if(op==3){
            if(l == r){
                cout << "1\n";
                continue;
            }
            cout<<query(1,2,n,l+1,r)[1]<<"\n";
        }else if(op==4){
            if(l == r){
                cout << "1\n";
                continue;
            }
            cout<<query(1,2,n,l+1,r)[2]<<"\n";
        }else if(op==5){
            cout<<query(1,2,n,l+1,r)[3]<<"\n";
        }
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java:实现杨辉三角

目录 思路 完整代码 思路 可以把杨辉三角看作是一个直角三角形&#xff0c;这样可以方便进行输出 以直角三角形中 i行j列 的3 为例&#xff0c;我们可以推出: [ i ] [ j ] [ i -1] [ j ] [ i - 1] [ j -1] 。 同时&#xff0c;杨辉三角也可以看作是一个二维数组&#x…

Tomcat服务器和Web项目的部署

目录 一、概述和作用 二、安装 1.进入官网 2.Download下面选择想要下载的版本 3.点击Which version查看版本所需要的JRE版本 4.返回上一页下载和电脑和操作系统匹配的Tomcat 5. 安装完成后&#xff0c;点击bin目录下的startup.bat&#xff08;linux系统下就运行startup.sh&…

Midjourney技巧-生成拟人化动物(做你的品牌形象代言人)

​ 前言/introduction 如何用Midjourney生成这种时尚潮流的动物拟人图片&#xff1f; 用来做你的品牌形象代言人也是不赖&#xff01; ​ 关键词/personify 生成这种动物拟人化的图片其实主要在关键词-拟人化personify 比如&#xff0c;一只拟人化的老鼠/An anthropomorphic…

惊!北京三害、上海四毒、广东五虎,谁才是互联网界的“拼命三郎”?

在互联网江湖中&#xff0c;流传着这样一份神秘的“工作强度排名”&#xff0c;它们以地域为划分&#xff0c;将那些被公认为加班狂魔的互联网大厂归为了“北京三害”、“上海四毒”和“广东五虎”。 这份名单一出&#xff0c;让人不禁哑然失笑&#xff0c;同时也让人深思&…

【系统架构设计】计算机网络

【系统架构设计】计算机网络 网络架构与协议网络互联模型OSI/RM 结构模型TCP/IP结构模型IPv6 局域网与广域网局域网特点 网络互连与常用设备网络互联设备交换技术路由技术 网络存储技术 网络架构与协议 网络互联模型 OSI/RM 结构模型 1977年&#xff0c;国际标准化组织为适应…

framebuffer屏幕显示接口(linux)

framebuffer &#xff1a; 帧缓存、帧缓冲技术 Linux内核为应用提供的一套显示相关接口 流程&#xff1a; 1. 打开显示设备&#xff08;/dev/fb0&#xff09; 2. 获取显示设备相关参数 3. 建立内存映射 4. 写入RGB颜色值 5. 解除映射 6. 关闭显示…

【深度学习】什么是自回归模型?

文章目录 自回归模型的数学表达自回归模型的特点示例自回归模型在机器学习中的应用总结扩散模型与自回归模型的区别扩散模型在TTS(文本转语音)中的应用总结自回归模型(Autoregressive Model, AR Model)是一种用于时间序列分析和生成的统计模型。它的核心思想是预测变量(通…

Java:成员内部类

文章目录 匿名内部类代码讲解new 类new接口 特点&#xff1a;作用&#xff1a;在开发中的应用场景&#xff1a; 成员内部类&#xff08;了解&#xff09;静态内部类&#xff08;了解&#xff09;局部内部类&#xff08;了解&#xff09; 匿名内部类 一种特殊的局部内部类&…

绘唐科技为什么是全网最强AI推文应用

绘唐科技之所以被称为全网最强AI推文应用&#xff0c;主要有以下几个原因&#xff1a; 绘唐AIGC阿祖https://qvfbz6lhqnd.feishu.cn/wiki/D3YLwmIzmivZ7BkDij6coVcbn7W 先进的AI技术&#xff1a;绘唐科技采用了最先进的自然语言处理和机器学习算法&#xff0c;能够快速准确地生…

掌握高可用核心:Keepalived 铸就坚不可摧的集群防线

目录 一.初识keepalived 二.VRRP工作模式 1.三种状态 2.选举机制 三.Keepalived 架构 四. Keepalived环境准备 五.KeepAlived 配置说明 1.配置文件组成部分 2.配置语法说明&#xff1a;全局配置 3.配置虚拟路由器 4.启用keepalived日志功能 5.实现独立子配置文件 六…

8月报名 | 海克斯康-MSC设计与仿真行业研讨会深圳站

您好&#xff01;感谢您长期以来对优飞迪科技与海克斯康的关注与支持。我们诚邀您参加8月23日的海克斯康-MSC设计与仿真行业研讨会深圳站活动&#xff0c;本次会议主要就目前大家所关注的电子热流体、电子电器噪声等热点仿真问题展开讨论&#xff0c;为大家提供工程实际问题的解…

BCNet

bilateral boundary extraction module (BBEM)&#xff0c;receptive field block (RFB). attention-driven cross-layer feature interaction modules (ACFIMs)&#xff0c;global feature integration modules (GFIMs) global max pooling (GMP) 作者未提供代码

input系统之InputReader

1.InputReader启动 InputReader和InputDispatcher是IMS中的两个重要的线程&#xff0c;InputReader主要负责从Eventhub获取事件&#xff0c;然后将事件进行处理&#xff0c;并将封装好的EventEntry事件交给InputDispatcher的去进行分发&#xff1b;InputDispatcher主要负责将输…

LeetCode 热题 HOT 100 (025/100)【宇宙最简单版】

【二叉树】No. 0124 二叉树中的最大路径和 【困难】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你…

12.C基础_字符串相关函数

字符串长度strlen 头文件 #include <string.h> 函数声明 size_t strlen(const char *s); 返回值&#xff1a;long型的字符串长度 s&#xff1a;要计算长度的字符串&#xff0c;必须以 \0 结尾 注意&#xff1a;strlen计算的长度是以 \0 为结尾&#xff0c;而sizeo…

【书生大模型实战营(暑假场)闯关材料】入门岛:第1关 Linux 基础知识

【书生大模型实战营&#xff08;暑假场&#xff09;闯关材料】入门岛&#xff1a;第1关 Linux 基础知识 1. 使用VScode进行SSH远程连接服务器2. 端口映射及实例参考文献 这一博客主要介绍使用VScode进行服务器远程连接及端口映射。 1. 使用VScode进行SSH远程连接服务器 安装V…

一个基于 vue 的强大表单和高性能表格组件,简洁API设计,支持虚拟树,列拖拽,懒加载,快捷菜单(附源码)

前言 在现代Web应用开发中&#xff0c;表单和表格是两个核心组件&#xff0c;它们对于数据展示和用户交互至关重要。然而&#xff0c;现有的解-决方案往往存在一些痛点&#xff0c;如不够灵活、性能问题、以及难以实现复杂功能等。这些问题限制了开发者的创造力&#xff0c;也…

树莓派开发相关知识二

1、相关术语 树莓派装载的芯片&#xff1a;BCM2835是一个MCU微处理器&#xff0c;它可以理解为CPU其它模块的组合。 GPIO&#xff1a;General-purpose input/output&#xff0c;通用型输入输出&#xff0c;其接脚可以供使用者由程控自由使用&#xff0c;PIN脚依现实考量可作为…

java或者sh脚本实现 实现 mysql 数据库指定表,定时导出并导入指定数据库并切换指定字段名(适合linux和windows)

定时导出指定数据库的指定表导出到指定数据库 一、Java实现 1、contronller Slf4j Controller public class BackupController {AutowiredBackupService backupService;// 备份 // ResponseBody // PostMapping("/backup/backupByfile")Scheduled(cron&quo…

音视频开发

通过多线程分别获取高分辨率(1920 * 1080)和低分辨率(1280 * 720) 初始化VI模块 初始化HIGH VENC模块 初始化LOW VENC模块 初始化RGA模块 绑定 VI和HIGH VENC 绑定 VI和RGA 创建线程 HIGH VENC处理 RGA处理 LOW VENC处理 销毁 QP原理的讲解 QP参数调节&#xff0c;指的是量化…