| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
线段树啊线段树啊.#include <iostream>
using namespace std;
bool cnt[35];
struct node
{
int l,r,cl;
}t[400005];
void build(int i,int x,int y)
{
t[i].cl=1;
t[i].l=x;
t[i].r=y;
if(x>=y-1)return ;
int mid=(x+y)/2;
build(i*2,x,mid);
build(i*2+1,mid,y);
}
void insert(int i,int x,int y,int col)
{
if(t[i].l>=y||t[i].r<=x)return ;
if(t[i].l>=x&&t[i].r<=y)
{
t[i].cl=col;
}
else
{
if(t[i].cl!=col)
{
if(t[i].cl>0)
{
t[i*2].cl=t[i*2+1].cl=t[i].cl;
}
t[i].cl=0;
insert(i*2,x,y,col);
insert(i*2+1,x,y,col);
}
}
}
void my_cont(int i,int x,int y)
{
if(t[i].l>=y||t[i].r<=x)return ;
if(t[i].cl>0)
cnt[t[i].cl]=1;
else
{
my_cont(i*2,x,y);
my_cont(i*2+1,x,y);
}
}
int l,T,o;
int x,y,color;
char ml;
int main()
{
scanf("%d%d%d",&l,&T,&o);
build(1,0,l);
for(int tmp=1;tmp<=o;tmp++)
{
cin>>ml;
if(ml=='C')
{
scanf("%d%d%d",&x,&y,&color);
insert(1,x-1,y,color);
}
else
{
int ans=0;
scanf("%d%d",&x,&y);
my_cont(1,x-1,y);
for(int k=1;k<=T;k++)
if(cnt[k])ans++;
printf("%d\n",ans);
memset(cnt,0,sizeof(cnt));
}
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator