贼简单的一道题
搞了一晚上是负数导致溢出
心态炸裂
#include <cstdio>
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <math.h>
#include <stack>
#define INF 0x3f3f3f3f
#define IMAX 2147483646
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
using namespace std;
ll n, x;
ll a[411111];
queue<ll> q;
ll dd,vv,ans;
int main() {
scanf("%lld%lld", &n, &x);
for (int i = 0; i < n; i++)
scanf("%lld", a + i), a[i + n] = a[i];
while (!q.empty())q.pop();
ans = dd = vv = 0;
for (int i = 0; i < n * 2; i++) {
q.push(i);
dd += a[i];
vv += (a[i] + 1) * a[i] / 2;
while (dd - a[q.front()] > x) {
dd -= a[q.front()];
vv -= (a[q.front()] + 1) * a[q.front()] / 2;
q.pop();
}
//ans = max(ans, vv - (dd - x + 1LL) * (dd - x) / 2);
if(dd > x) ans = max(ans, vv - (dd - x + 1LL) * (dd - x) / 2);
}
printf("%lld\n", ans);
return 0;
}