Codeforces 1696D Permutation Graph

R 分析裂区试验设计 裂区试验有主区部分和副区部分, 因而有主区部分误差(误差 a,简记为Ea )和副区部分误差(误差b,简记为Eb) 分别用于测验主区处理以及副区处理和主、副互作的显著性。对同一个二因素试验资料作自由度和平方和的分解,则可发现随机区组的误差项自由度和平方和分别为DFe、SSe,而裂区设计有两个误差项,其自由度和平方和分别为DFEa,DFEb, SSEa, SSEb。而区组,处理效应等各个变异项目的自由 阅读详情

转换题意:假设p在l位置,如果[l,r]是一个最值都在端点处的区间,那么p可以移动到r,问最小移动次数是多少?

考虑一个样例:2 1 5 3 4

对于每次走,我们应该是贪心的选择最大区间来走,那对每个序列,假设pos1,pos2是两个最值的位置,并且pos1<pos2,那么[pos1,pos2]是最大区间,为什么呢?

对pos1的左边的元素,如果他是区间最值,那么pos1就不会是区间最值,而pos1位置的元素是整个序列的最值,互相矛盾,所有每次只需取[pos1,pos2]作为一次操作。此时只需要找到[l,pos1]和[pos2,r]的操作最小值即可。

对于不修改地查询序列最值,ST表效率比线段树高些,每次查询能做到O(1)的复杂度。

#include<iostream>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<ctype.h>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<deque>
#define ll long long
#define ull unsigned long long
#define fr first
#define se second
#define endl '\n'
using namespace std;

const int inf=0x3fffffff;
const long long INF=0x3f3f3f3f3f3f;
const double eps=1e-8;
const double pi=2*acos(0.0);

template<typename T>
T father(T x){return x&1?x-1>>1:x>>1;}
template<typename T>
T ls(T x){return x<<1;}
template<typename T>
T rs(T x){return x<<1|1;}
template<typename T>
T abs_(T a){return a<0?-a:a;}
template<typename T>
T ceil_(T a,T b){return a%b?a/b+1:a/b;}
template<typename T>
T log_(T a,T b){return log(b)/log(a);}
template<typename T>
T gcd(T a,T b){return !b?a:gcd(b,a%b);}
template<typename T>
T lcm(T a,T b){return a/gcd(a,b)*b;}
template<typename T>
void exgcd(T a,T b,T& x,T& y)
{
	if(!b){x=1;y=0;return;}
	exgcd(b,a%b,x,y);
	T temp=x;x=y;
	y=temp-a/b*y;
}
template<typename T>
T solve_function(T a,T b,T c)
{
	if(a<0){a=-a;c=-c;}
	T x,y,base=gcd(a,b);
	exgcd(a,b,x,y);
	x*=c/base;T p=b/base;
	x=(x%p+p)%p;
	if(x<0) x+=abs_(p);
	return x;
}
template<typename T>
T reverse_element(T a,T k){return solve_function(a,k,(T)1);}
template<typename T>
T slow_multi(T a,T b,T p)
{
	T ret=0;
	while(b)
	{
		if(b&1) ret=(ret+a)%p;
		a=(a<<1)%p;
		b>>=1;
	}
	return ret;
}
template<typename T>
T qpow(T a,T b)
{
	T ret=1,base=a;
	while(b)
	{
		if(b&1) ret=ret*base;
		base=base*base;
		b>>=1;
	}
	return ret;
}

int read()
{
	int ret=0,base=1;
	char ch=getchar();
	while(!isdigit(ch))
	{
		if(ch=='-') base=-1;
		ch=getchar();
	}
	while(isdigit(ch))
	{
		ret=(ret<<1)+(ret<<3)+ch-48;
		ch=getchar();
	}
	return ret*base;
}

int n,pos[500005],a[500005],st1[500005][23],st2[500005][23];

int query_min(int l,int r)
{
	int len=log_(2,r-l+1);
	return min(st1[l][len],st1[r-(1<<len)+1][len]);
}
 
int query_max(int l,int r)
{
	int len=log_(2,r-l+1);
	return max(st2[l][len],st2[r-(1<<len)+1][len]);
}

int make(int l,int r)
{
	if(l>=r) return 0;
	int pos1=pos[query_min(l,r)],pos2=pos[query_max(l,r)];
	if(pos1>pos2) swap(pos1,pos2);
	return 1+make(l,pos1)+make(pos2,r);
}

void work()
{
	n=read();
	for(int i=1;i<=n;i++) pos[st1[i][0]=st2[i][0]=a[i]=read()]=i;
	for(int j=1;j<=22;j++)
	{
		for(int i=1;i+(1<<j)-1<=n;i++)
		{
			st1[i][j]=min(st1[i][j-1],st1[i+(1<<j-1)][j-1]);
			st2[i][j]=max(st2[i][j-1],st2[i+(1<<j-1)][j-1]);
		}
	}
	printf("%d\n",make(1,n));
}

int main()
{
	int t=read();
	while(t--) work();
 	return 0;
}

【目录】专栏文章导航 从最强工具链Davinci Configurator模块学习出发掌握AUTOSAR 阅读详情

相关推荐

告别GIS软件!用R语言ggplot2+ggmapcn绘制出版级世界地图(附5种投影对比图)

本文提供了一份完整的实践指南,教你如何利用R语言及其强大的ggplot2生态系统,结合ggmapcn包,绘制出出版级的世界地图。文章详细对比了五种经典地图投影(如摩尔维德、罗宾森投影)的代码实现与视觉差异,并讲解了如何添加比例尺、指北针等专业元素,最终导出高清PDF,实现从数据分析到专业可视化的全流程代码化操作,彻底告别传统GIS软件。

p5l2m9n4o6q的博客 406

CF Global Round 21 D/CF1696D Permutation Graph (单调栈,线段树)

题面:https://codeforces.com/contest/1696/problem/D解题思路:题目说是要建图,刚开始我想的是线段树建图,差点就放弃了(忘记怎么敲了)然后就发现其实和之前一道,问是否能满足每一个区间和都大于0的题目挺像的,所以不用建图了。因为是从左往右跳,首先我们知道以now为左端点,右端点可以是啥情况。所以得先用单调栈,把每个的右边第一个大(小)的位置求出来,记为lmn[ ],lmx[ ]。找到了范围,下一步就是找这个区间内可以跳的点。假设左端点now是最大值,且我们知道 i ,

qq_59423993的博客 443

从光耦隔离到稳定驱动:信捷伺服与STM32的硬件设计陷阱与救赎

本文深入探讨了信捷伺服驱动器与STM32微控制器配合时的硬件设计关键问题,包括光耦隔离电路选型、电源电压选择、拨码开关设置等核心环节。针对伺服驱动器的稳定驱动需求,提供了从电路设计到抗干扰策略的完整解决方案,帮助工程师规避常见陷阱,提升工业控制系统的可靠性。

gold8的专栏 310

Codeforces1696D. Permutation Graph,静态区间最大最小值,ST表

从 1 到 n 的路径一定要经过两个极值点,以此递归即可获得最优解。需要支持的操作是求静态区间的最大/最小值,可以用 ST 表,现场把我四年前的博客翻译成 rust… https://blog.csdn.net/m0_37809890/article/details/82585410......

秋叶红于二月花 543

RM机器人麦轮底盘实战:从零搭建到PID调参全记录(附避坑指南)

本文详细记录了RM机器人麦轮底盘从零搭建到PID调参的全过程,涵盖硬件组装、开发环境搭建、底盘解算和PID调参等关键步骤,并附有实用的避坑指南。特别针对麦轮控制、底盘解算和电机调试等核心问题提供了专业解决方案,帮助开发者快速提升机器人性能。

bush的博客 370

阿波罗开发板硬件架构与STM32模块化设计详解

嵌入式开发板的模块化设计是提升硬件复用性、降低迭代成本的关键技术路径。其核心在于底板与核心板的电气解耦与功能分层,依托STM32系列MCU(如F429/F767)的丰富外设资源与引脚复用能力,实现信号完整性、电源域隔离与热管理的系统级协同。该架构显著支撑工业HMI、智能家居网关、便携医疗设备等典型场景,尤其在RGB LCD驱动、QSPI Flash内存映射、多协议通信(CAN/RS485/USB)及低功耗唤醒(WK_UP按键)等工程实践中展现出高可靠性与易调试性。本文围绕阿波罗开发板展开深度解析,覆盖最小系

weixin_42510201的博客 64

Codeforces-1696 D: Permutation Graph【构造、分治、数据结构】

题目传送门:Codeforces-1696 D: Permutation Graph   给定一个 1⋯n1 \cdots n1⋯n 的排列,对于一个连续的区间 ai⋯aja_i \cdots a_jai​⋯aj​,若 aia_iai​ 是这段区间的最小/最大值,同时,aja_jaj​ 也是这段区间的最小/最大值,那么我们可以在 i,ji, ji,j 结点上连一条无向边。问这样构造出的图,从 111 到 nnn 的最短路径。  首先暴力是肯定不行的,因为若是一个单调的数组,能连的边是 n2n^2n2 级别的

Sherlock_Holmewei的博客 527

用Excel或WPS做两独立样本的T检验

一般情况下收集数据时常用的是Excel或者WPS,但统计时却用SPSS等软件进行统计学分析,经常很多人找不到SPSS的安装包,或者苦于正版激活或忘记教程,其实Excel或WPS自带函数就足够了,均数、标准差以及统计检验都是一个函数而已。解释:先做F检验,如果F>0.05就做T检验,Ttset里的数据为两组的数据的比较,结果如下。A组的均数计算 =AVERAGE(B2:B6)A组的标准差计算 =STDEV(B2:B6)B组的标准差计算=STDEV(B7:B19)分组 数值 A组均数 A组标准差 p值。

Mrrunsen的博客 6751

Codeforces 618B - Guess the Permutation

题目链接思路:第i行的最大值就是数组中的第i个。知道这个规律就可以暴力找了。#include &lt;iostream&gt; #include &lt;cstdio&gt; #include &lt;algorithm&gt; #include &lt;cstring&gt; using namespace std; int n; int nums[60][60]; int line[60];...

Peppermint__的博客 322

基于 ESP32 的智能药盒提醒装置设计与实现

本装置基于 ESP32 实现了智能药盒的核心功能,硬件选型兼顾成本与实用性,软件设计模块化、易拓展。后续可通过 ESP32 的 WiFi 模块接入物联网平台(如阿里云、OneNet),实现远程设置提醒、服药状态反馈等功能,进一步提升智能化水平。该装置能有效解决老人忘服药问题,具有较高的实用价值与推广潜力。

weixin_42300449的博客 1043

Vue2 - 详细实现安装西瓜视频 xgplayer 插件详细配置及使用教程,利用西瓜视频播放器播放 mp4、flv、hls 格式视频文件及视频推流(直播或监控摄像头画面),支持移动端H5及PC网站!

vue2,nuxt2,西瓜视频,xgplayer,插件组件,xgplayer-hls,xgplayer-flv,xgplayer-mp4,播放视频点播和直播视频流,自定义播放器样式,截屏,监控视频,vue使用西瓜播放器播放flv、hls、mp4视频,截屏按钮,直播流,报错,黑屏,加载失败,苹果ios不兼容,重连,怎么改样式,很卡,详细教程,监控实时播放推流,倍速播放,在线flv在线推流地址,HLS播放,vue西瓜播放器,vue如何使用西瓜视频插件做直播推流回流,视频点播,flv在线视频流播放,截图功能,利用

🏆 前端领域优质创作者 1万+

1696D. Permutation Graph 思维

link 思维给出一个序列 a1,a2,...,ana_1,a_2,...,a_na1​,a2​,...,an​ 为 1~n1~n1~n 的全排列。 i,ji,ji,j 之间存在一条无向边当且仅当 ai,aja_i,a_jai​,aj​ 恰好是 ai,...,aja_i,...,a_jai​,...,aj​ 这些数的最小值和最大值(一个最小一个最大)。每条边的长度均为1,问从 111 到 nnn 最短距离是多少。 1≤n≤2.5×1051\leq n\leq2.5\times10^51≤n≤2.5×105。

Strezia的博客 665

《FreeRTOS 入门与实战》第20章:移植到 RISC-V 平台

处理器上下文保存/恢复机制中断处理与任务切换的协同时钟源配置(通常使用 Machine Timer)平台特定的汇编代码实现// 典型RISC-V移植文件结构FreeRTOS/├── Source/portable/[编译器]/RISC-V/│ ├── port.c // 关键移植接口│ ├── portASM.s // 汇编级处理│ └── portmacro.h // 架构宏定义。

2301_79143213的博客 448

Problem - 1696D - CodeforcesD. Permutation Graph

cf 1900

m0_62167326的博客 122

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Codeforces Global Round 21 D. Permutation Graph

https://codeforces.com/contest/1696/problem/D区间最值, 递归给定一个 1 ~ n 的排列 { a[1], a[2], … , a[n] }, 定义 mn(i, j) = min( a[i ->j ] ), mx(i, j) = max( a[i -> j]).构建 n 个结点的无向图. 对于每一对 { i, j }, 如果 ( mn(i, j) == a[i] and mx(i, j) == a[j] ) or ( mn(i, j) == a[j] and mx

追殇 | Blog 278

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【6.25】Codeforces Global Round 21

Codeforces Global Round 21ALL:8 AC:4 补题:1题意:给定一个长度为 nnn 的数组 aaa 、一个长度为 kkk 的数组 bbb 和一个数字 mmm,现在对数组 aaa 进行以下操作:请问能否把数组 aaa 变成数组 bbb。 数据范围:1≤n,k≤5×1041\le n,k\le 5\times 10^41≤n,k≤5×104,2≤m≤1092\le m\le 10^92≤m≤109,1≤ai,bi≤1091\le a_i,b_i\le 10^91≤ai​,bi​≤10

ZhgDgE的博客 526

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

todotodo

from:

皮皮blog 5611

[学习笔记]笛卡尔树

笛卡尔树Cartesian Tree 前言 符合:祖先权值优先级更高,中序遍历是序列本身 类比treap,只不过不平衡 既然不如treap平衡,支持操作就少了。 那么支持的操作,复杂度必须要更优了。 建树 增量法 i=1~n 用单调栈维护最右边路径上的点 加入i点,从底向上找到第一个能放的位置,放上去,从栈中弹出的链就是左儿子。 中序遍历性质显然可以保证 权...

weixin_33882443的博客 335

【ZOJ 3874】Permutation Graph

浙江省赛题。当时赛后听说是NTT+CDQ震惊了两个词一个都没有听说过。 现在突然想起来这个题,回来一看也并不是那么的不可做。比赛的时候还在打表找规律233~ 首先可以想到,因为逆序对都要连一条边,因此所有的对于任意一个部分都是下表连续的,否则答案就为0。 若下表连续的,则可以想到答案只与长度有关。 不妨设dp[i]为长度为i的连续下表的方案数,则可以得到 dp[i] = i! - sig

u011332631的专栏 995

ZOJ3874 Permutation Graph 【分治NTT】

题目链接 ZOJ3874 题意简述: 在一个序列中,两点间如果有边,当且仅当两点为逆序对 给定一个序列的联通情况,求方案数对\(786433\)取模 题解 自己弄了一个晚上终于弄出来了 首先\(yy\)一下发现一个很重要的性质: 联通块内的点编号必须是连续的 证明: 假设一个联通块编号不连续,设\(a\),\(b\)分别为联通块左侧和联通块右侧中的一个点,\(x\)为\(a\),\(b\...

weixin_30693183的博客 222

zoj 3874 Permutation Graph

CDQ+NTT

我要吃熊猫 686

ZOJ3874 Permutation Graph

题目描述 题解: 显然一个整体一定是连续的一段数。 所以我们预处理长度为$len$的一组数的组成方案数就好了。 于是$dp$。 $dp[0]=0$,$dp[i]=i!-\sum(k!*dp[i-k])$ $i!$,这$i$个数瞎放。 $k!*dp[i-k]$,第$i$个数放到倒数第$k+1$位上,此时前面构成一个长度为$i-k$的联通块(方案数已经推出来了), 后面$k$...

a6t2007的博客 215

zoj 3874 Permutation Graph (cdq分治+NTT)

因为做做题学会了NTT ,比FFT的精度高了很多,收货很大。/* code by islands y1=a[0]+a[1]x^1+a[2]x^2.....a[n]x^n y2=b[0]+b[1]x^1+b[2]x^2.....b[m]x^m y=y1*y2; 在O(nlgn)的复杂度求出y的系数 */ #include #include #include #include #include

非确定有限状态自动机 1058

UVALive 6163 - Myth Busters

状态压缩dp。 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define FF(i, a, b) for(int i=a; i<b; i++) #define REP(i

ok_again的专栏 1112

Codeforces Global Round 21 A-E题解

Codeforces Global Round 21 A-E题 个人解题思路及代码记录

Cu_OH_2的博客 433

ZOJ3874 Permutation Graph(DP+分治NTT)

ZOJ3874 Permutation Graph 原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5482 题意: 多组数据。 对于一个排列{a1,a2,… an},如果他把每一对(ai,aj)满足 iaj(即逆序对)连接起来,会得到一张图。 例如,如果排列是{2,3,1,4},则1和2连接,1和3连接。

Bfk的博客 749
上一篇: 数据结构排序
下一篇: 树上启发式合并 洛谷U41492
stdforces
博客等级 码龄4年 9粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值