#include <iostream>
#include <vector>
#include <deque>
#include <stack>
#include <queue>
#include <list>
#include <cstring>
#include <string.h>
#include <cmath>
#include <string>
#include <sstream>
#include <cctype>
#include <iomanip>
using namespace std;
typedef long long ll;
// số phép đã xóa nhằm xác định chỉ số lúc idx
int idxDelete = 0;
const int N = 1e5 + 5;
// first laf ll, second = int;
// day giam dan
pair<ll, int> arr[N];
// chỉ số hiện tại khi thưcj hiện truy vấn thêm
int cur = 0;
// sum là chỉ số từ 1 tới i
ll prefixSum[N];
int first = 0; // là phần tử dầu của arr
int last = 0; // là phần tử cuối của arr
// mang hienj tai
// int a[N];
// first la idx, second la value
// queue<pair<int, ll>> q;
bool canDelete() {
return cur > idxDelete;
}
// Tra ve idx thoa man
int binarySearch() {
int l = first;
int r = last - 1;
int ans = -1;
while (l <= r) {
int mid = (l + r) / 2;
// thoa man
// mamg giam dan
if (arr[mid].first > prefixSum[cur] + prefixSum[idxDelete]) {
l = mid + 1;
ans = mid;
}
else {
r = mid - 1;
}
}
return ans;
}
void insertValue(int x)
{
prefixSum[cur + 1] = prefixSum[cur] + x;
while (first < last && arr[last - 1].first <= prefixSum[cur + 1]) {
--last;
}
arr[last] = {prefixSum[cur + 1], cur + 1};
++last;
++cur;
}
// Hàm xóa số ở đầu dãy
void deleteFromFront()
{
if (!canDelete()) {
return;
}
if (first < last && arr[first].second == idxDelete + 1) {
++first;
}
++idxDelete;
}
// Hàm truy vấn độ dài hậu tố dài nhất có tổng không âm
int findLongestNonNegativeSuffix()
{
int idx = binarySearch();
if (idx == -1) {
return idx;
}
return cur - arr[idx].second;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int q;
cin >> q;
for (int i = 0; i < q; i++)
{
int op;
cin >> op;
if (op == 1)
{
int x;
cin >> x;
insertValue(x);
}
else if (op == 2)
{
// TODO: Kiểm tra nếu dãy không rỗng thì mới xóa
deleteFromFront();
}
else if (op == 3)
{
int ans = findLongestNonNegativeSuffix(/* TODO: Các tham số cần thiết */);
cout << ans << "\n";
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZGVxdWU+CiNpbmNsdWRlIDxzdGFjaz4KI2luY2x1ZGUgPHF1ZXVlPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPGlvbWFuaXA+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CgovLyBz4buRIHBow6lwIMSRw6MgeMOzYSBuaOG6sW0geMOhYyDEkeG7i25oIGNo4buJIHPhu5EgbMO6YyBpZHgKaW50IGlkeERlbGV0ZSA9IDA7CmNvbnN0IGludCBOID0gMWU1ICsgNTsKLy8gZmlyc3QgbGFmIGxsLCBzZWNvbmQgPSBpbnQ7Ci8vIGRheSBnaWFtIGRhbgpwYWlyPGxsLCBpbnQ+IGFycltOXTsKLy8gY2jhu4kgc+G7kSBoaeG7h24gdOG6oWkga2hpIHRoxrBjaiBoaeG7h24gdHJ1eSB24bqlbiB0aMOqbQppbnQgY3VyID0gMDsKLy8gc3VtIGzDoCBjaOG7iSBz4buRIHThu6sgMSB04bubaSBpCmxsIHByZWZpeFN1bVtOXTsKaW50IGZpcnN0ID0gMDsgLy8gbMOgIHBo4bqnbiB04butIGThuqd1IGPhu6dhIGFycgppbnQgbGFzdCA9IDA7IC8vIGzDoCBwaOG6p24gdOG7rSBjdeG7kWkgY+G7p2EgYXJyCgovLyBtYW5nIGhpZW5qIHRhaQovLyBpbnQgYVtOXTsKCi8vIGZpcnN0IGxhIGlkeCwgc2Vjb25kIGxhIHZhbHVlCi8vIHF1ZXVlPHBhaXI8aW50LCBsbD4+IHE7Cgpib29sIGNhbkRlbGV0ZSgpIHsKICAgIHJldHVybiBjdXIgPiBpZHhEZWxldGU7Cn0KCi8vIFRyYSB2ZSBpZHggdGhvYSBtYW4KaW50IGJpbmFyeVNlYXJjaCgpIHsKICAgIGludCBsID0gZmlyc3Q7CiAgICBpbnQgciA9IGxhc3QgLSAxOwogICAgaW50IGFucyA9IC0xOwogICAgd2hpbGUgKGwgPD0gcikgewogICAgICAgIGludCBtaWQgPSAobCArIHIpIC8gMjsKICAgICAgICAvLyB0aG9hIG1hbgogICAgICAgIC8vIG1hbWcgZ2lhbSBkYW4KICAgICAgICBpZiAoYXJyW21pZF0uZmlyc3QgPiBwcmVmaXhTdW1bY3VyXSArIHByZWZpeFN1bVtpZHhEZWxldGVdKSB7CiAgICAgICAgICAgIGwgPSBtaWQgKyAxOwogICAgICAgICAgICBhbnMgPSBtaWQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByID0gbWlkIC0gMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gYW5zOwp9Cgp2b2lkIGluc2VydFZhbHVlKGludCB4KQp7CiAgICBwcmVmaXhTdW1bY3VyICsgMV0gPSBwcmVmaXhTdW1bY3VyXSArIHg7CiAgICB3aGlsZSAoZmlyc3QgPCBsYXN0ICYmIGFycltsYXN0IC0gMV0uZmlyc3QgPD0gcHJlZml4U3VtW2N1ciArIDFdKSB7CiAgICAgICAgLS1sYXN0OwogICAgfQogICAgYXJyW2xhc3RdID0ge3ByZWZpeFN1bVtjdXIgKyAxXSwgY3VyICsgMX07CiAgICArK2xhc3Q7CiAgICArK2N1cjsKfQoKLy8gSMOgbSB4w7NhIHPhu5Eg4bufIMSR4bqndSBkw6N5CnZvaWQgZGVsZXRlRnJvbUZyb250KCkKewogICAgaWYgKCFjYW5EZWxldGUoKSkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChmaXJzdCA8IGxhc3QgJiYgYXJyW2ZpcnN0XS5zZWNvbmQgPT0gaWR4RGVsZXRlICsgMSkgewogICAgICAgICsrZmlyc3Q7CiAgICB9CiAgICArK2lkeERlbGV0ZTsKfQoKLy8gSMOgbSB0cnV5IHbhuqVuIMSR4buZIGTDoGkgaOG6rXUgdOG7kSBkw6BpIG5o4bqldCBjw7MgdOG7lW5nIGtow7RuZyDDom0KaW50IGZpbmRMb25nZXN0Tm9uTmVnYXRpdmVTdWZmaXgoKQp7CiAgICBpbnQgaWR4ID0gYmluYXJ5U2VhcmNoKCk7CiAgICBpZiAoaWR4ID09IC0xKSB7CiAgICAgICAgcmV0dXJuIGlkeDsKICAgIH0KICAgIHJldHVybiBjdXIgLSBhcnJbaWR4XS5zZWNvbmQ7Cn0KCmludCBtYWluKCkKewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBpbnQgcTsKICAgIGNpbiA+PiBxOyAKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7IGkrKykKICAgIHsKICAgICAgICBpbnQgb3A7CiAgICAgICAgY2luID4+IG9wOwoKICAgICAgICBpZiAob3AgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICBjaW4gPj4geDsKICAgICAgICAgICAgaW5zZXJ0VmFsdWUoeCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG9wID09IDIpCiAgICAgICAgewogICAgICAgICAgICAvLyBUT0RPOiBLaeG7g20gdHJhIG7hur91IGTDo3kga2jDtG5nIHLhu5duZyB0aMOsIG3hu5tpIHjDs2EKICAgICAgICAgICAgZGVsZXRlRnJvbUZyb250KCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG9wID09IDMpCiAgICAgICAgewogICAgICAgICAgICBpbnQgYW5zID0gZmluZExvbmdlc3ROb25OZWdhdGl2ZVN1ZmZpeCgvKiBUT0RPOiBDw6FjIHRoYW0gc+G7kSBj4bqnbiB0aGnhur90ICovKTsKICAgICAgICAgICAgY291dCA8PCBhbnMgPDwgIlxuIjsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQ==