看到这题有点像校内膜你赛的弱化版,就用我赛时的代码改了改交上,发现能过。
#include<bits/stdc++.h>
#define AC return 0;
#define sc(n) scanf("%lld",&(n))
#define pr(n) printf("%lld",(n))
#define hh puts("")
#define kg printf(" ")
#define N 114514
#define int long long
using namespace std;
int n,d[N],ans;
void sol(int l,int r)
{
if(l>r)return ;
if(l==r){ans+=d[r];/*cout<<l<<" "<<r<<endl;*/return;}
//cout<<l<<" "<<r<<endl;
int id,minn=114514;
for(int i=l;i<=r;i++)
{
if(d[i]<minn)
{
minn=d[i];
id=i;
}
}
ans+=minn;
for(int i=l;i<=r;i++)
{
d[i]-=minn;
}
sol(l,id-1);sol(id+1,r);
}
signed main()
{
sc(n);
for(int i=1;i<=n;i++)
{
sc(d[i]);
}
sol(1,n);
pr(ans);
AC
}
复杂度上界是 O(n2) 的,会被有序的序列卡飞(但校内模拟也没人卡
hack数据:
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen(".out","w",stdout);
printf("100000\n");
for(int i=1;i<=100000;i++)
{
printf("%d ",i);
}
return 0;
}