しゃくとりは経験的にバグらせやすいので、できる限り避けたい。
deque と map でシミュレーションする。
#include <cstdio>
#include <deque>
#include <map>
using namespace std;
int main(void) {
int N, W; scanf("%d%d", &N, &W);
deque<int> deq;
size_t maxi = 0;
int acc = 0;
map<int, int> cnt;
for(int i=0; i<N; ++i) {
int ai; scanf("%d", &ai);
deq.push_back(ai);
acc += ai;
++cnt[ai];
while(W < acc || cnt[ai] > 1) {
int popped = deq.front(); deq.pop_front();
--cnt[popped];
acc -= popped;
}
maxi = max(maxi, deq.size());
}
printf("%lu\n", maxi);
return 0;
}
(ΦωΦ)<おしまい