根据每天的值排序,然后它左右最近的数一定是和它的值相差最小的。
于是在左右都看看,如果天数比它的天数小就满足题意所以直接算到答案里去。
WA 3 个测试点,RE 1 个测试点。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e7 + 10;
struct node{
int day,y;
}a[maxn];
int n,sum = 0;
bool cmp(node x,node z)
{
return x.y <= z.y;
}
int main()
{
ios::sync_with_stdio(false);
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> a[i].y;
a[i].day = i;
}
sort(a+1,a+n+1,cmp);
for(int i = 1;i <= n;i++)
{
if(a[i].day == 1)
{
sum += a[i].y; continue;
}
int m = 114514;
for(int j = i - 1;j >= 1;j--)
{
if(a[j].day >= a[i].day)
continue;
m = abs(a[j].y - a[i].y); break;
}
for(int j = i + 1;j <= n;j++)
{
if(a[j].day >= a[i].day)
continue;
m = min(m,abs(a[j].y - a[i].y)); break;
}
sum += m;
}
cout << sum;
return 0;
}