CF1827B2

news/2025/2/8 19:18:37/文章来源:https://www.cnblogs.com/stawalr/p/18705234

非常好的转换

想了很久,想到了要对缝进行讨论,算每个缝的贡献,但是还是没想到最后一步。

  1. 可以发现,对长为一的区间排序居然不需要代价

  2. 手搓下对\(x\sim y\)排序与对\(x\sim z\),\(z+1\sim y\)排序,前者代价为\(y-x\),后者为\(z-x+y-z-1=y-x-1\),由此可得结论,选若干个区间排序相当于把原区间打散成小区间,且打散到单个数是相当于没选这个数,所以可以保证正确性。

  3. 原问题可转化为对每个子区间里的断点,即\(z\sim z+1\)被打断的这一连系,进行求和,最终在总答案中减去这些位置。(CF原文:原问题等价于求\((l,k,r)\)满足\(max(l\sim k)<min(k+1\sim r)\)的三元组个数)

从这里开始没想到的...

  1. 此时我们设\((l,k,r)\)中,\(min(k+1\sim r)=a_i\),则我们枚举\(i\),为了使\(max(l\sim k)<min(k+1\sim r)\),必定有\(a_k\)\(a_i\)左边第一个小于\(a_i\)的数,所以我们可以求出\(k\),没有这样的\(k\)则这个\(i\)贡献为\(0\)

  2. 接着我们可以看\(l\)所满足的限制。设\(a_x\)\(a_k\)左边第一个大于\(a_i\)的数(若没有则\(x=0\)),\(a_y\)\(a_i\)右边第一个小于\(a_i\)的数(若没有则\(y=n+1\)),我们可以知道,\(i\)此时对所有\(x<l<=k<i<=r<y\)\((l,r)\)有一的贡献,所以\(i\)的贡献为\((k-x)*(y-i)\)

使用\(st\)表预处理,二分查找,时间复杂度\(O(nlogn)\)

code

#include<cstdio>
#include<algorithm>
#include<iostream>
#define int long long
using namespace std;
const int mn=3e5+5;
int n,a[mn],st[2][mn][20];
int lt[mn],ans;
void init()
{lt[1]=0;for(int i=2;i<=3e5;i++){lt[i]=lt[i>>1]+1;}
}
void build()
{for(int i=1;i<=n;i++){st[0][i][0]=st[1][i][0]=a[i];}for(int i=1;i<20;i++){for(int j=1;j<=n-(1<<i)+1;j++){st[0][j][i]=max(st[0][j][i-1],st[0][j+(1<<(i-1))][i-1]);st[1][j][i]=min(st[1][j][i-1],st[1][j+(1<<(i-1))][i-1]);}}
}
int qry(int x,int l,int r)
{int y=lt[r-l+1];if(x==0)return max(st[x][l][y],st[x][r-(1<<y)+1][y]);return min(st[x][l][y],st[x][r-(1<<y)+1][y]);
}
void solve()
{ans=0;scanf("%lld",&n);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);ans+=(n-i+1)*(n-i)/2;}build();// cerr<<ans<<"-----\n";// int abc=0;for(int i=1;i<=n;i++){int x=0,y=n+1,k=-1;int l=1,r=i-1;while(l<=r){int mid=(l+r)>>1;if(qry(1,mid,i-1)<a[i]){k=mid;l=mid+1;}else{r=mid-1;}}if(k==-1)continue;l=1;r=k-1;while(l<=r){int mid=(l+r)>>1;if(qry(0,mid,k-1)>a[i]){x=mid;l=mid+1;}else{r=mid-1;}}l=i+1;r=n;while(l<=r){int mid=(l+r)>>1;if(qry(1,i+1,mid)<a[i]){y=mid;r=mid-1;}else{l=mid+1;}}// cerr<<ans<<" "<<i<<" "<<x<<" "<<y<<" "<<k<<'\n';ans-=(k-x)*(y-i);}// abc/=2;printf("%lld\n",ans);
}
signed main()
{init();int T;scanf("%lld",&T);while(T--){solve();}
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

尝试使用阿里云计算巢部署 DeepSeek-R1

记录一下用阿里云计算巢部署 DeepSeek-R1 的经过。进入阿里云计算巢控制台的服务目录,选择 DeepSeek 社区版,点击「开始部署」,选择最便宜的 ECS 实例 GRID 虚拟化4核30G,费用是 1.748/小时。点击「立即创建」,然后控制台会显示正在部署的状态。部署完成后,控制台会显示公…

未来已来:云手机+AI如何重塑Facebook、Google的智能营销生态

未来已来:云手机+AI如何重塑Facebook、Google的智能营销生态 在数字化浪潮奔涌的当下,科技融合正以令人惊叹的速度重塑各个行业,智能营销领域更是首当其冲。云手机与AI自动化工具的深度融合,为Facebook、Google构建的庞大智能营销生态带来了颠覆性的变革,开拓出全新的发展…

Burp Suite 2024激活汉化

转载自https://blog.csdn.net/m0_52985087/article/details/140299827 前言在项目即将上线阶段,迈入生产环境之际,确保其安全性成为我们不可忽视的首要任务。为筑起一道坚不可摧的安全防线,我们借助业界公认的网络安全利器——Burp Suite,我们将展开一场全面的安全测试,旨…

清华权威出品!104页《DeepSeek从入门到精通》免费领,解锁AI时代的核心竞争力!

引言: 在AI技术席卷全球的今天,如何高效驾驭大模型工具已成为个人与企业脱颖而出的关键。清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室余梦珑博士后团队倾力打造的《DeepSeek从入门到精通》电子书重磅发布!全书104页,从基础操作到高阶技巧,手把手教你玩转国产顶…

win11家庭中文版登录应用提示:“为了对电脑进行保护,已经阻止此应用”

1.家庭中文版组策略里面禁用:以管理员批准模式运行所有管理员 win11打不开组策略,需要复制文本内容到记事本,修改为bat后缀执行 @echo off pushd "%~dp0" dir /b c:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum …

4种比常见的线程池和线程同步买票问题

线程池 所谓的线程池:其实就是线程对象的容器。 可以根据需要,在启动时,创建1个或者多个线程对象。 java中有4种比较常见的线程池。 1.固定数量的线程对象。 2.根据需求动态创建线程:动态创建线程:根据需求来创建线程的个数,会自动给我们分配合适的线程个数来完成任务。 3.…

12. Makefile文件

一、什么是Makefile文件Makefile 文件时一种用于管理和自动化软件编译过程的文本文件。它通常包含了一系列规则,这些规则描述了如何根据源代码文件生成可执行文件或者其它目标文件。Makefile 的核心概念是规则和依赖关系,规则定义了如何生成一个或多个目标文件,而依赖关系则…

busybox 设置登录用户名及密码

1、配置 busybox2、替换新的 /bin/busybox,建立 /bin/login、/sbin/getty 软链接ln -sf /bin/busybox ./bin/login ln -sf /bin/busybox ./sbin/getty3、设置 /etc/inittab 不需要登录:ttyS0::respawn:/bin/ash -l -i需要登录:ttyS0::respawn:/sbin/getty 115200 ttyS04、设…

DoIP 协议详解

转载:车载以太网DoIP 协议,万字长文详解_doip协议-CSDN博客 一、前言 DoIP(Diagnostic Communication over Internet Protocol) 协议是一种用于汽车诊断通信的协议,它允许通过IP网络(如以太网)进行诊断操作。 DoIP协议的设计初衷是为了解决传统基于CAN (Controller Area N…

2025:白手起家,两娃的爸准备创业

前言 2024年陆陆续续听到老东家几个同事被裁的消息,倒有些后悔2023年自己主动提出离职,结束北漂回老家。算了下,损失个小几十万。 2024年6月份来了一场彻彻底底的自我反思,找不到明确目标,于是稀里糊涂定了两个计划:每天读书,围绕技术、文学、创业类。 粉丝数涨到150。工…

【Java Mail】 使用java mail发送邮件

465端口和587端口差异对比可参考:https://liaoxuefeng.com/books/java/spring/integration/javamail/index.html特别注意写在最前面:1.SMTP邮箱服务 有两个端口SMTP 端口号(SSL)465 SMTP 端口号(starttls)587所以,在发送邮件时,一定要注意 不同端口,配置Properties细节…