这个单调队列有什么问题?
  • 板块P3800 Power收集
  • 楼主MushR
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/19 17:11
  • 上次更新2023/11/3 08:50:30
查看原帖
这个单调队列有什么问题?
621883
MushR楼主2023/7/19 17:11
#include<bits/stdc++.h>
using namespace std;

int n,m,k,t;

int a[4001][4001];
int f[4001][4001];

deque<int> q;

int main(){
	cin>>n>>m>>k>>t;
	for(int i=1;i<=k;i++){
		int x,y,v;
		cin>>x>>y>>v;
		a[x][y]=v;
	}
	
	for(int i=1;i<=m;i++){
		f[1][i]=a[1][i];
	}
	for(int i=2;i<=n;i++){
		q.clear();
		for(int j=1;j<=min(m,t);j++){
			while(!q.empty() && f[i-1][q.back()]<f[i-1][j+t])
				q.pop_back();
			q.push_back(j);
		}
		for(int j=1;j<=m;j++){
			if(!q.empty() && j-q.front()>t){
				q.pop_front();
			}
			if(j+t<=m){
				while(!q.empty() && f[i-1][q.back()]<f[i-1][j+t])
					q.pop_back();
				q.push_back(j+t);
			}
			
			f[i][j]=f[i-1][q.front()]+a[i][j];
		}
	}
	
	int ans=0;
	for(int i=1;i<=m;i++){
		ans=max(ans,f[n][i]);
	}
	cout<<ans;
	
	return 0;
}
2023/7/19 17:11
加载中...