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;
}