记录编号 141130 评测结果 AAAAAAAAAAAAAA
题目名称 线段覆盖 最终得分 100
用户昵称 GravatarTA 是否通过 通过
代码语言 C++ 运行时间 1.607 s
提交时间 2014-11-29 13:08:11 内存使用 14.82 MiB
显示代码纯文本
#include<iostream>
using namespace std;
#include<cstdio>
#include<cstring>
#include<algorithm>
#define root 1,0,L
#define lson node<<1,l,(l+r)>>1
#define rson node<<1|1,((l+r)>>1)+1,r
struct S{
	int num,sum,len;
	bool l,r;
}tree[800004];
char * ptr=(char *)malloc(5000000);
inline void update(int node,int l,int r){
	if(tree[node].num){
			tree[node].sum=1;
			tree[node].l=1;
			tree[node].r=1;
			tree[node].len=r-l;
	}
	else{
		tree[node].sum=tree[node<<1].sum+tree[node<<1|1].sum-(tree[node<<1].r&tree[node<<1|1].l);
		tree[node].l=tree[node<<1].l;
		tree[node].r=tree[node<<1|1].r;
		tree[node].len=tree[node<<1].len+tree[node<<1|1].len+(tree[node<<1].r&tree[node<<1|1].l);
	}
}
inline void add(int node,int l,int r,int a,int b,int x){
	if(a<=l&&r<=b){
		tree[node].num+=x;
		if(l!=r)update(node,l,r);
		else{
			tree[node].sum=(bool)tree[node].num;
			tree[node].l=(bool)tree[node].num;
			tree[node].r=(bool)tree[node].num;
			tree[node].len=0;
		}
		return;
	}
	if(a>r||b<l)return;
	add(lson,a,b,x);
	add(rson,a,b,x);
	update(node,l,r);
}
inline void in(int &x){
	while(*ptr<'0'||*ptr>'9')++ptr;
	x=0;
	while(*ptr>47&&*ptr<58)x=x*10+*ptr++-'0';
}
int main(){
	freopen("xdfg.in","r",stdin);
	freopen("xdfg.out","w",stdout);
	fread(ptr,1,5000000,stdin);
	int L,n,flag,a,T;
	in(L),in(n);
	while(n--){
		in(flag),in(a),in(T);
		add(root,a,a+T,flag-1?-1:1);
		printf("%d %d\n",tree[1].sum,tree[1].len);
	}
}