记录编号 |
343722 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Color the Axis |
最终得分 |
100 |
用户昵称 |
Kulliu |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.153 s |
提交时间 |
2016-11-09 17:01:29 |
内存使用 |
11.27 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
class input
{
public:
input& operator >> (int& x)
{
char c=' ';x=0;
while(c<'0' || c>'9') c=getchar();
while(c>='0' && c<='9') x=x*10+c-'0',c=getchar();
return *this;
}
}in;
const int maxn=200010;
int n,m,t;
struct Node
{
int l,r,wt;
bool vis;
Node(int l,int r,int wt,bool vis): l(l),r(r),wt(wt),vis(vis){}
Node(){}
}node[maxn<<2];
void built(int x,int l,int r)
{
node[x]=Node(l,r,0,0);
if(l==r) return;
int mid=l+(r-l>>1);
built(x<<1,l,mid);
built(x<<1|1,mid+1,r);
}
void modify(int x,int l,int r)
{
Node& nd=node[x];
if(nd.vis) {return;}
if(nd.l==nd.r)
{
nd.vis=1;nd.wt=1;
return;
}
if(nd.l==l && nd.r==r)
{
t=nd.wt;
nd.wt=nd.r-nd.l+1;nd.vis=1;
return;
}
int mid=nd.l+(nd.r-nd.l>>1),lt=x<<1,rt=x<<1|1;
if(mid<l) modify(rt,l,r);
else if(mid+1>r) modify(lt,l,r);
else modify(lt,l,mid),modify(rt,mid+1,r);
nd.wt=node[lt].wt+node[rt].wt;
if(nd.r-nd.l+1<=nd.wt) nd.vis=1;
}
int main()
{
freopen("axis.in","r",stdin);
freopen("axis.out","w",stdout);
in>>n>>m;
built(1,1,n);
for(int l,r;m--;)
{
in>>l>>r;modify(1,l,r);
printf("%d\n",n-node[1].wt);
}
return 0;
}