ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ARC 119 补题记录

2021-05-19 22:36:36  阅读:175  来源: 互联网

标签:return int ll long ARC 补题 inline include 119


这把感觉质量很高。

\(E\)
\(E\)比较简单所以先写个\(E\),考虑就一个置换操作来说改变的只有两端的值。
考虑\(|a_i - a_{i - 1}|\)变成区间,则我们考虑分类讨论,发现只有当\(a_{i + 1} > a_{i}\)且\(a_r > a_{r + 1}\)还有\(a_{i + 1} < a_{i}\)且\(a_r < a_{r + 1}\)时,交换操作会带来一些贡献,这个贡献是两倍交集。两种情况可以反转序列来做。、(注意单独考虑\(1\)和\(n\))的情况。

E
#include<iostream>
#include<cstdio>
#include<algorithm>
#define ll long long
#define N 400005

ll n,a[N],sum,ans;

struct P{ll l,r;}b[N];

inline bool operator < (P a,P b){return a.l < b.l;}
inline ll abs(ll a){return a >= 0? a : -a;}

int main(){
	scanf("%lld",&n);
	for(int i = 1;i <= n;++i)
	scanf("%lld",&a[i]);
//	for(int i = 1;i <= n;++i)
//	std::cout<<a[i]<<" ";	
	for(int i = 2;i <= n;++i)
	sum += abs(a[i] - a[i - 1]);
	ans = sum;
//	std::cout<<sum<<std::endl;
	for(int i = 2;i <= n - 1;++i)
	ans = std::min(ans,sum - abs(a[i + 1] - a[i]) + abs(a[i + 1] - a[1]));
	for(int i = 2;i <= n - 1;++i)
	ans = std::min(ans,sum - abs(a[i - 1] - a[i]) + abs(a[i - 1] - a[n]));
	//(al,al + 1) (ar,ar + 1)
	ll cnt = 0;
	for(int i = 1;i <= n - 1;++i)
	if(a[i] < a[i + 1])
	b[++cnt].l = a[i],b[cnt].r = a[i + 1];
	std::sort(b + 1,b + cnt + 1);
	ll maxr = b[1].r;
	for(int i = 2;i <= cnt;++i){
//		std::cout<<b[i].l<<" "<<b[i].r<<std::endl;
		ans = std::min(ans,sum - 2 * (std::min(maxr,b[i].r) - b[i].l));
		maxr = std::max(b[i].r,maxr);
	}
	std::reverse(a + 1, a + n + 1);
	cnt = 0;
	for(int i = 1;i <= n - 1;++i)
	if(a[i] < a[i + 1])
	b[++cnt].l = a[i],b[cnt].r = a[i + 1];
	std::sort(b + 1,b + cnt + 1);
	maxr = b[1].r;
	for(int i = 2;i <= cnt;++i){
		ans = std::min(ans,sum - 2 * (std::min(maxr,b[i].r) - b[i].l));
		maxr = std::max(b[i].r,maxr);
	}
	std::cout<<ans<<std::endl;	
}

标签:return,int,ll,long,ARC,补题,inline,include,119
来源: https://www.cnblogs.com/dixiao/p/14787599.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有