#include #include #include using namespace std; #define N_MAX 1<<17 typedef struct node{ int numA; int numB; int lazy; }node; node seg[1+(4*N_MAX)]; void init(int n){ for(int i=0;i<=4*n;i++) seg[i]={0,0,0}; } inline void lazy_eval(int l,int r, int k){ if( seg[k].lazy != 0 ){ if( seg[k].lazy == 1 ){ seg[k].numA=(r-l+1), seg[k].numB=0;} if( seg[k].lazy == 2 ){ seg[k].numB=(r-l+1), seg[k].numA=0;} seg[2*k].lazy=seg[k].lazy; seg[2*k+1].lazy=seg[k].lazy; seg[k].lazy=0; } } int getVal(int x, int y, int v, int l=1, int r=N_MAX, int k=1){ //cout << x << ", "<< y <<", "<< v<<", "<< l <<", "<< r<<" ," << k<r ) return 0; if( yr ) return; if( y> N >> Q; long long pointA=0; long long pointB=0; for( int i =0 ; i < Q; i++ ){ int x,l,r; scanf("%d%d%d",&x,&l,&r); if( x!=0 ){ update(l+1,r+1,x); //print(); } else{ int numA= getVal(l+1,r+1,1); int numB= getVal(l+1,r+1,2); if( numA > numB) pointA+=numA; if( numB > numA) pointB+=numB; } } pointA += getVal(1,N,1); pointB += getVal(1,N,2); cout << pointA << " " << pointB<