#include <bits/stdc++.h>
using namespace std;
#define all(v) begin(v),end(v)
#define pb push_back
using ii = pair<int,int>;
struct dat {
long long gr[2][2];
dat() {memset(gr,0,sizeof(gr));}
dat(long long _gr[2][2]) {memcpy(gr,_gr,sizeof(gr));}
dat(long long _x) {gr[0][1]=gr[1][0]=1e18;gr[0][0]=0;gr[1][1]=_x;}
dat operator + (dat b) {
long long ans[2][2];
ans[0][0]=ans[0][1]=ans[1][0]=ans[1][1]=1e18;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
for(int k=0;k<2;k++)
for(int l=0;l<2;l++)
if(j||k)
ans[i][l] = min(ans[i][l], gr[i][j] + b.gr[k][l]);
return dat(ans);
}
long long toll() {
long long ans = 1e18;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
ans = min(ans, gr[i][j]);
return ans;
}
};
struct segtree {
int n;
vector<dat> seg;
segtree(int _n): n(_n), seg(2*_n, dat(0LL)) {}
void up(int x, dat v) {
for(seg[x+=n]=v;x>>=1;)
seg[x] = seg[x<<1] + seg[x<<1|1];
}
dat qry() {return seg[1];}
};
int main() {
segtree s(1<<19);
int q, l;
cin >> q >> l;
long long cnt[q];
memset(cnt,0,sizeof(cnt));
while(q--) {
int t, y, x;
cin >> t >> x >> y;
cnt[x] += y;
s.up(x,dat(cnt[x]));
dat res = s.qry();
cout << s.qry().toll() << "\n";
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |