| ||||||||||
| 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 | |||||||||
%s 超时?#include<iostream>
#define MAXN 200005
using namespace std;
struct segTree
{
int l,r,c;
}st[MAXN*3];
int res[50];
void build(int l,int r,int num)
{
st[num].l=l;
st[num].r=r;
st[num].c=1;
if(l==r) return ;
int mid=(l+r)>>1;
build(l,mid,num<<1);
build(mid+1,r,(num<<1)+1);
}
void update(int l,int r,int num,int c)
{
if((st[num].l==st[num].r) || ((st[num].l==l) && (st[num].r==r)))
{
st[num].c=c;
return ;
}
if(st[num].c>=1)
{
st[num<<1].c=st[(num<<1)+1].c=st[num].c;
st[num].c=-1;
}
int mid=(st[num].l+st[num].r)>>1;
if( mid < l)
update(l,r,(num<<1)+1,c);
else if(mid >= r)
update(l,r,num<<1,c);
else
{
update(l,mid,num<<1,c);
update(mid+1,r,(num<<1)+1,c);
}
}
void query(int l,int r,int v)
{
if(st[v].c>0)
{
res[st[v].c]=1;
return ;
}
if(st[v].l==st[v].r) return ;
int mid=(st[v].l+st[v].r)>>1;
if(r<=mid)
{
query(l,r,v<<1);
}
else if(l>mid)
{
query(l,r,(v<<1)+1);
}
else
{
query(l,mid,v<<1);
query(mid+1,r,(v<<1)+1);
}
}
int main()
{
int l,o,t,a,b,c,tmp;
char ch;//[2];
scanf("%d%d%d",&l,&t,&o);
build(1,l,1);
for(int i=0;i<o;i++)
{
//scanf("%s",ch);
getchar();
ch=getchar();
if(ch=='C')
{
scanf("%d%d%d",&a,&b,&c);
if(a > b) { a^=b^=a^=b; }
update(a,b,1,c);
}
else
{
scanf("%d%d",&a,&b);
memset(res,0,sizeof(res));
if(a > b)
{ a^=b^=a^=b; }
query(a,b,1);
int ans=0;
for(int i=1;i<=30;i++)
{
if(res[i])
ans++;
}
printf("%d\n",ans);
}
}
//system("pause");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator