比赛 |
[不是Rapiz出的]农场主钦定NOIP模拟赛1 |
评测结果 |
AAAAAAAAAA |
题目名称 |
Color the Axis |
最终得分 |
100 |
用户昵称 |
jmisnal |
运行时间 |
1.217 s |
代码语言 |
C++ |
内存使用 |
9.47 MiB |
提交时间 |
2016-11-08 21:18:40 |
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
int read()
{
int x=0;char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x;
}
int n,m;
int ans;
struct data{
int l,r,v;
}tr[800005];
void build(int l,int r,int bh)
{
tr[bh].l=l;tr[bh].r=r;
tr[bh].v=r-l+1;
if(l==r)
return;
int mid=(l+r)>>1;
build(l,mid,bh*2);
build(mid+1,r,bh*2+1);
}
void change(int l,int r,int bh)
{
// cout<<l<<' '<<r<<' '<<bh<<' '<<tr[bh].l<<' '<<tr[bh].r<<endl;;
if(tr[bh].l==l&&tr[bh].r==r)
{
ans+=tr[bh].v;
tr[bh].v=0;
return;
}
if(tr[bh].v==0)
return;
int mid=(tr[bh].l+tr[bh].r)>>1;
if(r<=mid)
change(l,r,bh*2);
else if(l>mid)
change(l,r,bh*2+1);
else
{
change(l,mid,bh*2);
change(mid+1,r,bh*2+1);
}
tr[bh].v=tr[bh*2].v+tr[bh*2+1].v;
}
int main()
{
// freopen("abcd.in","r",stdin);
// freopen("2.out","w",stdout);
freopen("axis.in","r",stdin);
freopen("axis.out","w",stdout);
n=read();m=read();
build(1,n,1);
ans=n;
int l,r,c;
for(int i=1;i<=m;i++)
{
l=read();r=read();
ans=0;
change(l,r,1);
// cout<<l<<' '<<r<<' '<<ans<<endl;
n-=ans;
printf("%d\n",n);
}
return 0;
}