记录编号 462525 评测结果 AAAAAAAAAAAAAA
题目名称 线段覆盖 最终得分 100
用户昵称 Gravatar青衫白叙 是否通过 通过
代码语言 C++ 运行时间 0.759 s
提交时间 2017-10-22 13:37:45 内存使用 15.95 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#define mid ((l+r)>>1)
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define ri register int
#define I __inline__ __attribute((always_inline))
using namespace std;
const int N=2e5+5;
#define BUFSIZE 300000
I char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
I int read( ){
    static char c=nc();ri x,f=1;
    for(;c>'9'||c<'0';c=nc()) if(c=='-') f=-1;
    for(x=0;c<='9'&&c>='0';c=nc()) x=(x<<3)+(x<<1)+c-48;
    return x*f;
}
namespace fob
{char b[BUFSIZE] = {}, *f=b, *g=b+BUFSIZE-2;}
#define pob  (fwrite(fob::b,sizeof(char),fob::f-fob::b,stdout),fob::f=fob::b,0)
#define pc(x) (*(fob::f++)=(x),(fob::f==fob::g)?pob:0)
struct foce {
	~foce() {pob;fflush(stdout);}
}_foce;
namespace ib
{char b[100];}
I void print(ri x) {
	if(x==0) {pc(48);/*pc('\n');*/return;}
	char *s=ib::b;//*(++s)='\n'-48;
	while(x) *(++s)=x%10,x/=10;
	while(s!=ib::b) pc((*(s--))+48);
}
int m,n,op,a,T; 
int cnt[N<<2],len[N<<2],add[N<<2],lcov[N<<2],rcov[N<<2];
I void merge(ri l,ri r,ri rt){
	if(add[rt]){
		cnt[rt]=lcov[rt]=rcov[rt]=1;len[rt]=r-l+1;return;
	}
	lcov[rt] = lcov[rt<<1];
	rcov[rt] = rcov[rt<<1|1];
	cnt[rt] = cnt[rt<<1] + cnt[rt<<1|1];
	if(rcov[rt<<1]==1&&lcov[rt<<1|1]==1) --cnt[rt];
	len[rt] = len[rt<<1] + len[rt<<1|1];
}
inline void update(ri L,ri R,ri c,ri l,ri r,ri rt){
	if(L <= l && r <= R){
		add[rt] += c;
		if(l == r) len[rt]=cnt[rt]=lcov[rt]=rcov[rt]=add[rt]>0;
		else merge(l,r,rt);
		return;
	}
	if(L <= mid) update(L,R,c,lson);
	if(mid <  R) update(L,R,c,rson);
	merge(l,r,rt);
}
int main(){
	freopen("xdfg.in","r",stdin);
	freopen("xdfg.out","w",stdout);
	n=read();m=read();
	while(m--){
		op=read();a=read();T=read();
		if(op==1) update(a,a+T-1,1,1,n,1);
		else update(a,a+T-1,-1,1,n,1);
		print(cnt[1]);pc(' ');print(len[1]);pc('\n');
	}
}