神秘RE求调
查看原帖
神秘RE求调
575643
AaronLaw201楼主2024/9/25 19:18

rt,最后一个点RE

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5+10;
int n, m, a[N], dp[N], pre[N];
int st[N][22];
deque<int> q;

void init() {
	for (int i = 1; i <= n; i++)	st[i][0] = a[i];
	int lo = log2(n);
	for (int j = 1; j <= lo; j++) {
		for (int i = 1; i <= n; i++) {
			st[i][j] = max(st[i][j-1], st[i+(1<<(j-1))][j-1]);
		}
	}
}

int query(int l, int r) {
	int len = log2(r-l+1);
	return max(st[l][len], st[r-(1<<len)+1][len]);
}

signed main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		pre[i] = pre[i-1]+a[i];
	}
	init();
	dp[0] = 0;
	q.push_back(0);
	for (int i = 1; i <= n; i++) {
		while (!q.empty() && pre[i]-pre[q.front()] > m)	q.pop_front();
		dp[i] = dp[q.front()]+query(q.front()+1, i);
		while (!q.empty() && dp[i] <= dp[q.back()]) 	q.pop_back();
		q.push_back(i);
//		cout << dp[i] << ' ';
	}
//	cout << endl;
	cout << dp[n];
	
	return 0;
}
2024/9/25 19:18
加载中...