#include #define FOR(i,a,b) for(int i=(a);i<(b);i++) #define REP(i,b) FOR(i,0,b) #define PB push_back #define F first #define S second using namespace std; typedef long long LL; typedef LL ut; typedef vector VI; typedef pair pr; typedef pair ppr; typedef vector Vppr; typedef priority_queue > PQ; const int INF=1e+9; const int SIZE=1<<17; LL dx[]={0,0,1,-1},dy[]={1,-1,0,0}; LL segval[2][SIZE<<1],segSum[2][SIZE<<1]; LL score[2]; set ika; void queryAdd(int a,int b,int s,int e,int val,int col,int now){ if(a<=s && e<=b) segval[col][now]+=val; else if(e::iterator it){ int na=(*it).F.S; int nb=(*it).F.F; int col=(*it).S; if(a<=na && nb<=b){ add(na,nb,-1,col); ika.erase(it); return true; } else if(b> N >> Q; ika.insert(ppr(pr(-1,-1),0)); REP(i,Q){ scanf("%lld %lld %lld",&x,&l,&r); l++; r++; if(x==0){ int point[]={sum(l,r,0),sum(l,r,1)}; REP(i,2) if(point[i]>point[i^1]){ score[i]+=(LL)point[i]; } } else{ add(l,r,1,x-1); ika.insert(ppr(pr(r,l),x-1)); set::iterator fit,it=ika.find(ppr(pr(r,l),x-1)); fit=it; if(it!=ika.begin()) --it; if(fit!=ika.end()) ++fit; while(fit!=ika.end() && cut(l,r,fit++)); while(it!=ika.begin() && cut(l,r,it--)); } } REP(i,2) cout << (i?" ":"") << score[i]+sum(1,N,i); cout << endl; }