记录编号 |
462525 |
评测结果 |
AAAAAAAAAAAAAA |
题目名称 |
线段覆盖 |
最终得分 |
100 |
用户昵称 |
青衫白叙 |
是否通过 |
通过 |
代码语言 |
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');
}
}