求dalao帮调
查看原帖
求dalao帮调
631104
yx20240301楼主2022/7/29 10:22

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;
}
2022/7/29 10:22
加载中...