求调
  • 板块灌水区
  • 楼主faejiabing
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/3 20:54
  • 上次更新2024/11/3 20:55:59
查看原帖
求调
945416
faejiabing楼主2024/11/3 20:54

P8102 wa了1,2

#include<bits/stdc++.h> 
using namespace std;
int n,m,a[5000005],b[5000005],c[5000005];
deque <int> q;
int main(){
	cin>>n>>m>>a[0];
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=n;i>=1;i--){
		while(!q.empty()&&q.front()-i+1>m)q.pop_front();
		while(!q.empty()&&a[q.front()]<=a[i])q.pop_back();
		q.push_back(i);
		b[i]=a[q.front()];
	}
	while(!q.empty())q.pop_back();
	for(int i=n;i>=1;i--){
		while(!q.empty()&&q.front()-i+2>m)q.pop_front();
		while(!q.empty()&&a[q.front()]<=a[i])q.pop_back();
		q.push_back(i);
		c[i]=a[q.front()];
	}
	c[0]=a[0];
	for(int i=1;i<=n;i++)c[i]=max(a[0],c[i]),c[i]+=c[i-1],b[i]+=b[i-1];
	int ans=0;
	for(int i=0;i<=n;i++){
		int temp=c[min(n-m+2,i+1)]-c[max(0,i-m+2)-1]-b[min(i,n-m+1)]+b[max(0,i-m+2)-1];
		//cout<<temp<<endl;
		ans=max(ans,temp);
	}
	cout<<ans+b[n-m+1];
	return 0;
}

2024/11/3 20:54
加载中...