作业介绍

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5e5 + 10;
int a[N], n, m, ans = -1e18, sum[N];
deque<int>q;
signed main(void) {
	ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		sum[i] = sum[i - 1] + a[i];
	}
	for (int i = 1; i <= n; i++) {
		while (q.size() && sum[i - 1] <= sum[q.back()]) q.pop_back();
		q.push_back(i - 1);
		while (q.size() && q.front() < i - m) q.pop_front();
		ans = max(ans, sum[i] - sum[q.front()]);
	}
	cout << ans << '\n';
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e6+5;
int n,L,R;
int a[N],f[N],q[N],tail=-1,head=0;
signed main(){
	cin>>n>>L>>R;
	for(int i=0;i<=n;i++){
		cin>>a[i];
	}
	memset(f,0xcf,sizeof(f));
	f[0] = a[0];
	int res = -1e18;
	for(int i=L;i<=n+R;i++){
		//i-L入队
		while(tail>=head && f[i-L]>=f[q[tail]])--tail;
		q[++tail] = i-L;
		while(tail>=head && q[head]<i-R)++head;
		int j = q[head];
		f[i] = f[q[head]]+a[i];
		if(i>=n)res = max(res,f[i]);
	}
	cout<<res<<endl;
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+5;
int n,k,f[N],sum[N],q[N],tail=-1,head=0;
signed main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>sum[i];
		sum[i]+=sum[i-1];
	}
	int res = -1e18;
	q[++tail] = 0;
	for(int i=1;i<=n;i++){
		//1.i入队
		while(tail>=head && f[i-1]-sum[i]>=f[q[tail]-1]-sum[q[tail]])--tail;
		q[++tail] = i;
		while(tail>=head && q[head]<i-k)++head;
		int j = q[head];
		if(j==0)f[i] = sum[i];
		else f[i] = f[j-1]+sum[i]-sum[j];
		res = max(res,f[i]);
	}
	cout<<res<<endl;
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 4005;
int n,m,a[N][N],k,t;
int f[N][N*2],q[N],tail=-1,head=0;
signed main(){
	cin>>n>>m>>k>>t;
	for(int i=1;i<=k;i++){
		int x,y,z;
		cin>>x>>y>>z;
		a[x][y] = z;
	}
	int res = 0;
	for(int i=1;i<=m;i++)f[1][i] = a[1][i];
	for(int i=2;i<=n;i++){
		tail = -1;
		head = 0;
		memset(q,0,sizeof(q));
		for(int s=1;s<=t;s++){
			while(tail>=head && f[i-1][s]>=f[i-1][q[tail]])--tail;
			q[++tail] = s;
		}
		for(int j=1;j<=m;j++){
			while(tail>=head && f[i-1][j+t]>=f[i-1][q[tail]])--tail;
			q[++tail] = j+t;
			while(tail>=head && abs(j-q[head])>t)head++;
			int s = q[head];
			f[i][j] = f[i-1][s]+a[i][j];
			res = max(res,f[i][j]);
		}
	}
	cout<<res<<endl;
	return 0;
}

题目

认领作业后才可以查看作业内容。
状态
正在进行…
题目
16
开始时间
2026-9-10 0:00
截止时间
2026-10-1 23:59
可延期
24 小时