当前位置: 首页 > news >正文

【Codeforces】CF193D Two Segments

题目链接

CF方向
Luogu方向

题目解法

考虑在值域上的问题:有多少段区间,对应在排列上不超过 2 2 2
肯定需要枚举一个端点,另一个快速算出,考虑枚举值域区间右端点 r r r,计算 l l l
可以发现,新增一个数对应在排列上的区间有 3 种不同的情况

  1. 新增一个段
  2. 合并 2 个段
  3. 和左边或右边相连,段数不变

这三种操作对应的值域区间范围不难得出,然后线段树维护即可
时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)
这道题的一个启发是:添加一个数,可以快速维护出以这个数为右端点的所有区间对应在一个数列上的连通段的个数

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=300100;
int n,col[N],pos[N];
struct Node{int mn1,mn2,sum1,sum2,tag;
}seg[N<<2];
struct SegmentTree{void build(int l,int r,int x){seg[x].tag=0,seg[x].mn1=0,seg[x].sum1=r-l+1,seg[x].mn2=1e9,seg[x].sum2=0;if(l==r) return;int mid=(l+r)>>1;build(l,mid,x<<1),build(mid+1,r,x<<1^1);}Node merge(Node lc,Node rc){Node ret;ret.sum1=ret.sum2=ret.tag=0;ret.mn1=min(lc.mn1,rc.mn1);ret.mn2=min(lc.mn2,rc.mn2);if(lc.mn1>ret.mn1) ret.mn2=min(ret.mn2,lc.mn1);if(rc.mn1>ret.mn1) ret.mn2=min(ret.mn2,rc.mn1);if(lc.mn1==ret.mn1) ret.sum1+=lc.sum1;if(rc.mn1==ret.mn1) ret.sum1+=rc.sum1;if(lc.mn1==ret.mn2) ret.sum2+=lc.sum1;if(rc.mn1==ret.mn2) ret.sum2+=rc.sum1;if(lc.mn2==ret.mn2) ret.sum2+=lc.sum2;if(rc.mn2==ret.mn2) ret.sum2+=rc.sum2;return ret;}void pushdown(int x){int D=seg[x].tag;// cout<<"Delta : "<<D<<'\n';seg[x<<1].mn1+=D,seg[x<<1].mn2+=D,seg[x<<1].tag+=D;seg[x<<1^1].mn1+=D,seg[x<<1^1].mn2+=D,seg[x<<1^1].tag+=D;seg[x].tag=0;}void modify(int l,int r,int x,int L,int R,int v){if(L<=l&&r<=R){// cout<<l<<' '<<r<<' '<<seg[x].mn1<<' '<<v<<'\n';seg[x].mn1+=v,seg[x].mn2+=v,seg[x].tag+=v;// cout<<l<<' '<<r<<' '<<seg[x].mn1<<' '<<v<<'\n';return;}pushdown(x);int mid=(l+r)>>1;if(mid>=L) modify(l,mid,x<<1,L,R,v);if(mid<R) modify(mid+1,r,x<<1^1,L,R,v);seg[x]=merge(seg[x<<1],seg[x<<1^1]);// cout<<l<<' '<<r<<' '<<seg[x<<1].mn1<<' '<<seg[x<<1^1].mn1<<' '<<seg[x].mn1<<'\n';}Node query(int l,int r,int x,int L,int R){if(L<=l&&r<=R) return seg[x];pushdown(x);int mid=(l+r)>>1;if(mid>=L&&mid<R) return merge(query(l,mid,x<<1,L,R),query(mid+1,r,x<<1^1,L,R));if(mid>=L) return query(l,mid,x<<1,L,R);return query(mid+1,r,x<<1^1,L,R);}
}sg;
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
int main(){n=read();for(int i=1;i<=n;i++) col[i]=read(),pos[col[i]]=i;sg.build(1,n,1);LL ans=0;for(int i=1;i<=n;i++){int L=col[pos[i]-1],R=col[pos[i]+1];//add a block -> L and R not addedint bound=max(L>i?1:L+1,R>i?1:R+1);//opt : [bound,i] +1sg.modify(1,n,1,bound,i,1);//merge two blocksbound=min(L,R);if(max(L,R)<i&&bound>0){//opt : [1,bound] -1sg.modify(1,n,1,1,bound,-1);}//merge with L or R//[min(L,R)+1,max(L,R)] do not changeif(i>1){Node t=sg.query(1,n,1,1,i-1);if(t.mn1<=2) ans+=t.sum1;if(t.mn2<=2) ans+=t.sum2;}}printf("%lld",ans);return 0;
}
/*
10 
5 6 1 3 4 9 10 2 8 7
*/

相关文章:

【Codeforces】CF193D Two Segments

题目链接 CF方向 Luogu方向 题目解法 考虑在值域上的问题&#xff1a;有多少段区间&#xff0c;对应在排列上不超过 2 2 2 段 肯定需要枚举一个端点&#xff0c;另一个快速算出&#xff0c;考虑枚举值域区间右端点 r r r&#xff0c;计算 l l l 可以发现&#xff0c;新增…...

内存管理概述

前言 在学习计算机科学时&#xff0c;内存管理是一个非常重要的概念。简单地说&#xff0c;内存是计算机用来存储和访问数据的地方。而内存管理是计算机系统如何分配、使用和管理内存的过程。 为什么要学习内存管理&#xff1f; 1. 高效性&#xff1a;内存管理能够帮助计算机更…...

Spring的重试机制-SpringRetry

在我们的日常开发中&#xff0c;经查会遇到调用接口失败的情况&#xff0c;这时候就需要通过一些方法来进行重试&#xff0c;比如通过while循环手动重复调用或&#xff0c;或者通过记录错误接口url和参数到数据库&#xff0c;然后手动调用接口&#xff0c;或者通过JDK/CGLib动态…...

水稻叶病害数据集(目标检测,yolo使用)

1.数据集文件夹 train文件夹&#xff08;44229张&#xff09;&#xff0c;test文件夹&#xff08;4741张&#xff09;&#xff0c;valid文件夹&#xff08;6000张&#xff09; 2.train文件夹展示 labels展示 标签txt展示 data.yaml文件展示 对数据集感兴趣的可以关注最后一行…...

鸿蒙系列-如何使用好 ArkUI 的 @Reusable?

如何使用好 ArkUI 的 Reusable&#xff1f; OpenHarmony 组件复用机制 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为 系统组件&#xff0c;由开发者定义的称为 自定义组件。 在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合…...

展锐平台音频框架

Audio DT介绍 1.概述 DT&#xff08;Device Tree&#xff09;是一种描述硬件的数据结构&#xff0c;DTS即设备树源码。 2.Audio DTS 文件架构 \bsp\kernel\kernel.4.14\arch\arm64\boot\sprd ums512.dts //SOC级相关节点 ——sc2730.dtsi //Codec ——sharkl5Pro.dts…...

webpack loader和plugins的区别

在Webpack中&#xff0c;Loader和Plugin是两个不同的概念&#xff0c;用于不同的目的。 Loader是用于处理非JavaScript模块的文件的转换工具。它们将文件作为输入&#xff0c;并将其转换为Webpack可以处理的模块。例如&#xff0c;当您在Webpack配置中使用Babel Loader时&…...

适配器模式:接口的平滑过渡

欢迎来到设计模式系列的第七篇文章&#xff01;在前面的几篇文章中&#xff0c;我们已经学习了一些常见的设计模式&#xff0c;今天我们将继续探讨另一个重要的设计模式——适配器模式。 适配器模式简介 适配器模式是一种结构型设计模式&#xff0c;它主要用于将一个类的接口…...

vscode搭建springboot开发环境

前言 idea好用到但是收money&#xff0c;eclipse免费但是界面有点丑&#xff0c;所以尝试使用vscode开发springboot 提前准备 安装jdk&#xff0c;jdk需要大于11 安装vscode 安装maven 安装插件 主要是下面的插件 Extension Pack for JavaSpring Boot Extension PackDepe…...

SpringMVC-学习笔记

文章目录 1.概述1.1 SpringMVC快速入门 2. 请求2.1 加载控制2.2 请求的映射路径2.3 get和post请求发送2.4 五种请求参数种类2.5 传递JSON数据2.6 日期类型参数传递 3.响应3.1 响应格式 4.REST风格4.1 介绍4.2 RESTful快速入门4.3 简化操作 1.概述 SpringMVC是一个基于Java的Web…...

【STM32】学习笔记(TIM定时器)

TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff0c;而且…...

Jdk8 动态编译 Java 源码为 Class 文件(三)

Jdk8 动态编译 Java 源码为 Class 文件 一.JDK版本二.工程介绍1.依赖2.启动类3.配置类&#xff08;用于测试依赖注入&#xff09;4.工具类1.Java 源码文件读取类2.SpringBoot 容器实例管理类 5.测试类1.抽象类2.接口类3.默认抽象实现4.默认接口实现 6.接口类1.测试接口2.类重载…...

Shell自动化日志维护脚本

简介&#xff1a; 系统日志对于了解操作系统的运行状况、故障排除和性能分析至关重要。然而&#xff0c;长期积累的日志文件可能变得庞大&#xff0c;影响系统性能。在这篇文章中&#xff0c;我们将介绍一个自动化的解决方案&#xff0c;使用 Bash 脚本来监控和维护系统日志文件…...

设计模式入门笔记

1 设计模式简介 在IT这个行业&#xff0c;技术日新月异&#xff0c;可能你今年刚弄懂一个编程框架&#xff0c;明年它就不流行了。 然而即使在易变的IT世界也有很多几乎不变的知识&#xff0c;他们晦涩而重要&#xff0c;默默的将程序员划分为卓越与平庸两类。比如说&#xff…...

存储成本降低85%,携程历史库场景的降本实践

携程&#xff0c;一家中国领先的在线票务服务公司&#xff0c;从 1999 年创立至今&#xff0c;数据库系统历经三次替换。在移动互联网时代&#xff0c;面对云计算卷积而来的海量数据&#xff0c;携程通过新的数据库方案实现存储成本降低 85% 左右&#xff0c;性能提升数倍。本文…...

如何精确掌握函数防抖和函数节流的使用?

前序 函数防抖&#xff08;Debouncing&#xff09;和函数节流&#xff08;Throttling&#xff09;都是用于控制函数执行频率的技术&#xff0c;通常在处理高频率触发的事件&#xff08;如窗口滚动、鼠标移动、输入框输入等&#xff09;时非常有用 一、核心概念 函数防抖 函…...

【Linux系列】离线安装openjdk17的rpm包

首发博客地址 首发博客地址[1] 系列文章地址[2] 视频地址[3] 准备 RPM 包 请从官网下载&#xff1a;https://www.oracle.com/java/technologies/downloads/#java17[4] 如需不限速下载&#xff0c;请关注【程序员朱永胜】并回复 1020 获取。 安装 yum localinstall jdk-17_linux…...

Python 没有 pip 包问题解决

最近需要搞一个干净的Python,从官网上直接下载解压可用的绿色版&#xff0c;发现无法正常使用PiP 一 官网下载Python https://www.python.org/downloads/ 选择 embeddable package,这种是免安装的包&#xff0c;解压后可以直接使用。 二 配置环境变量 添加环境变量&#xff1a…...

并发-Java中的锁(二)--- 重入锁ReentrantLock,公平锁,非公平锁笔记

重入锁ReentrantLock 支持重进入的锁&#xff0c;表示该锁能够支持一个线程对资源的重复加锁该锁支持获取锁时的公平和非公平的选择 如果在绝对时间上&#xff0c;先对锁进行获取的请求一定先被满足&#xff0c;那么锁是公平的&#xff0c;获取锁是顺序的。 实现重进入 线程再…...

LeetCode每日一题:1921. 消灭怪物的最大数量(2023.9.3 C++)

目录 1921. 消灭怪物的最大数量 题目描述&#xff1a; 实现代码与解析&#xff1a; 贪心 原理思路&#xff1a; 1921. 消灭怪物的最大数量 题目描述&#xff1a; 你正在玩一款电子游戏&#xff0c;在游戏中你需要保护城市免受怪物侵袭。给你一个 下标从 0 开始 且长度为 …...

Anthropic开发者大会:Claude平台与Code桌面端齐发力,助力开发者跨越AI应用鸿沟!

AI开发范式转移&#xff1a;Anthropic大会核心信息如果你错过Anthropic最新举办的 “Code w/ Claude” 开发者大会&#xff0c;可能正在错过软件工程史上最大的范式转移。大会核心信息是AI模型能力呈“指数级”增长&#xff0c;多数企业开发模式仍停留在“线性”阶段。Anthropi…...

Midjourney 35mm风格生成失效真相(35mm胶片模拟底层机制大起底)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney 35mm风格生成失效的表象与核心矛盾 近期大量用户反馈&#xff0c;在 Midjourney v6 及后续快速迭代版本中&#xff0c;使用传统提示词如 --style raw --s 750 配合 35mm film, Kodak Portra…...

通过Taotoken CLI工具一键配置团队开发环境与统一API调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken CLI工具一键配置团队开发环境与统一API调用 在团队协作开发中&#xff0c;统一大模型API的接入配置是一个常见需求。…...

QRazyBox终极指南:如何快速修复损坏的二维码

QRazyBox终极指南&#xff1a;如何快速修复损坏的二维码 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox QRazyBox是一款专业级的二维码分析与恢复工具包&#xff0c;专为修复损坏的二维码而设…...

对比官方价,Taotoken活动价带来的Token成本优势感知

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比官方价&#xff0c;Taotoken活动价带来的Token成本优势感知 1. 引言&#xff1a;从固定成本到按需消耗 对于个人开发者或小型…...

多智能体编排实战:从架构设计到生产部署的12周训练指南

1. 项目概述与核心价值最近在探索如何系统性地掌握多智能体编排技术时&#xff0c;我遇到了一个名为“Shadow Dojo”的开源项目。这个名字很有意思&#xff0c;“道场”一词本身就意味着一个需要持续练习、精进技艺的地方。这个项目将自己定位为“训练场”&#xff0c;目标非常…...

Midscene.js:2025年AI自动化测试的三大颠覆性突破

Midscene.js&#xff1a;2025年AI自动化测试的三大颠覆性突破 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 你是否还在为跨平台UI自动化测试的复杂性而头疼&am…...

高通Android音频HAL揭秘:从AudioFlinger到libaudiohal.so的加载与设备打开流程

高通Android音频HAL深度解析&#xff1a;从框架设计到硬件交互的全链路实现 在Android系统的多媒体生态中&#xff0c;音频子系统扮演着至关重要的角色。作为连接应用层与物理硬件的桥梁&#xff0c;音频硬件抽象层&#xff08;HAL&#xff09;的设计直接决定了设备的音频性能…...

基于GPT-5.5构建智能问答系统的实现方案

概要GPT-5.5 是 OpenAI 于 2026 年 4 月发布的旗舰模型&#xff0c;Terminal-Bench 2.0 得分 82.7%&#xff0c;在 Agent 能力、多步骤自动化、工具调用等方面较前代有显著提升。该模型沿用 Chat Completions API 接口格式&#xff0c;支持文本和图像输入&#xff0c;具备 func…...

UE4 TCP通信实战:从网络调试助手到Python服务端的跨平台数据交互

1. UE4 TCP通信基础与环境搭建 第一次在UE4里折腾TCP通信的时候&#xff0c;我对着文档研究了整整两天。后来发现其实用对方法&#xff0c;半小时就能跑通第一个Demo。这里分享我最常用的TCPSocketPlugin插件方案&#xff0c;比原生C实现简单十倍。 先到虚幻商城搜索"TCP …...