rt,本蒟蒻调了一个小时,不知道爆了几次零,求大佬帮调,第二个数据输出是有问题的。
#include<bits/stdc++.h>
#define ll long long
#define maxn 1000010
using namespace std;
ll n,x,a[maxn],h[maxn],max_h[maxn],line[maxn],ans=0;
int main(){
scanf("%lld%lld",&n,&x);
for(ll i=1;i<=n;i++) scanf("%lld",&a[i]);
ll head=1,tail=1;
for(ll i=1;i<=n;i++){
while(head<=tail&&i-line[head]+1>x)
head++;
while(head<=tail&&a[line[tail]]>a[i])
tail--;
line[++tail]=i;
if(i-x+1>=0) h[i-x+1]=a[line[head]];
}
head=1,tail=0;
for(ll i=1;i<=n;i++){
while(head<=tail&&i-line[head]+1>x)
head++;
while(head<=tail&&h[line[tail]]<h[i])
tail--;
line[++tail]=i;
max_h[i]=h[line[head]];
}
for(ll i=1;i<=n;i++) ans+=a[i]-max_h[i];
cout<<ans<<'\n';
ans=0;
ll sum=0;
ll last_s=0,last_b=10000000;
for(ll i=1;i<=n;i++){
if(a[i]!=last_s){
sum++;
last_s=i+x+1;
}
if(i>last_b){
sum++;
last_b=i-x-1;
}
}
cout<<sum;
return 0;
}