标签:
5 4
1 1 3
2 2 5
1 2 4
2 3 5
1
2
记录号 S1306202 评测状态 Accepted 题目 P1473 校门外的树3 提交时间 2015-08-31 00:02:13 代码语言 C++ 消耗时间 589 ms 消耗内存 2024 KiB
#include<stdio.h>
#include<string.h>
int n,m;
struct s
{
int l,r;
}node[50050<<2];
void build(int l,int r,int tr)
{
node[tr].l=node[tr].r=0;
if(l==r)
return;
int mid=(l+r)>>1;
build(l,mid,tr<<1);
build(mid+1,r,tr<<1|1);
}
void insertl(int L,int R,int l,int r,int tr)
{
if(L<=l&&r<=R)
{
node[tr].l++;
return;
}
int mid=(l+r)>>1;
if(L<=mid)
insertl(L,R,l,mid,tr<<1);
if(R>mid)
insertl(L,R,mid+1,r,tr<<1|1);
}
void insertr(int L,int R,int l,int r,int tr)
{
if(L<=l&&r<=R)
{
node[tr].r++;
return;
}
int mid=(l+r)>>1;
if(L<=mid)
insertr(L,R,l,mid,tr<<1);
if(R>mid)
insertr(L,R,mid+1,r,tr<<1|1);
}
int queryl(int pos,int l,int r,int tr)
{
if(l==r)
return node[tr].l;
int mid=(l+r)>>1;
if(pos<=mid)
{
return node[tr].l+queryl(pos,l,mid,tr<<1);
}
else
return node[tr].l+queryl(pos,mid+1,r,tr<<1|1);
}
int queryr(int pos,int l,int r,int tr)
{
if(l==r)
return node[tr].r;
int mid=(l+r)>>1;
if(pos<=mid)
{
return node[tr].r+queryr(pos,l,mid,tr<<1);
}
else
return node[tr].r+queryr(pos,mid+1,r,tr<<1|1);
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
build(0,n,1);
int num=0;
while(m--)
{
int op,a,b;
scanf("%d%d%d",&op,&a,&b);
if(op==1)
{
insertl(0,a-1,0,n,1);
insertr(b+1,n,0,n,1);
num++;
}
else
{
a=queryr(a,0,n,1);
b=queryl(b,0,n,1);
printf("%d\n",num-a-b);
}
}
}
}版权声明:本文为博主原创文章,未经博主允许不得转载。
TyvjOJ题目 P1473 校门外的树3(线段树区间染色种类数不覆盖)
标签:
原文地址:http://blog.csdn.net/yu_ch_sh/article/details/48116983