专栏文章
题解:P13595 『GTOI - 1B』筝
P13595题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioi24ak
- 此快照首次捕获于
- 2025/12/02 19:33 3 个月前
- 此快照最后确认于
- 2025/12/02 19:33 3 个月前
P13595 『GTOI - 1B』筝
解题思路
从特殊性质 切入,发现将相邻的两个数调至共鸣调整度之和最小,为 。
扩展一下可以发现,差值大于 的两数调整至相等所花费的调整度一定大于或等于依次调整差值为 的两数,因此仅调整差值为 的两数达到要求花费的调整度之和一定最小。
把差值为 的两数全部看作区间,这时就可以发现原本的题目变为了一道区间覆盖问题,且所有是已经排序好的。最后只需求最少需要几个区间将整个数列覆盖就行了。
完整代码
CPP#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int MAXN=1e7+9;
int n,a[MAXN],b[MAXN],f[MAXN],out,tmp,ans=1;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",a+i),b[a[i]]=i;
out=max(b[a[1]-1],b[a[1]+1]);
while(1)
{
if(out==n)break;
int cnt=0;
for(int i=tmp+1;i<=out+1;i++)cnt=max(max(b[a[i]-1],b[a[i]+1]),cnt);
tmp=out;out=cnt;ans++;
}
printf("%d",ans);
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...