| ||||||||||
| 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 | |||||||||
Re:过了这个,基本就不会WA了,还有注意A可能大于BIn Reply To:Re:过了这个,基本就不会WA了,还有注意A可能大于B Posted by:yuest at 2009-08-24 19:59:01 我还是wa了
#include<iostream>
#include<stdlib.h>
using namespace std;
struct node
{
int l,r,c;
}tree[4000000];
int tot(0);
bool pos[100];
void build(int l,int r,int s)
{
tree[s].l=l;
tree[s].r=r;
tree[s].c=1;
// cout<<tree[s].l<<" "<<tree[s].r<<" "<<s<<" "<<endl;
if(tree[s].l==tree[s].r)
{
return ;
}
int m=(l+r)/2;
build(l,m,s*2);
build(m+1,r,s*2+1);
}
void ins(int le,int ri,int c,int s)
{
// cout<<tree[s].l<<" "<<tree[s].r<<" "<<tree[s].c<<" "<<le<<" "<<ri<<endl;
if((tree[s].l==le)&&(tree[s].r==ri))
{
tree[s].c=c;
return ;
}
if((tree[s].c==-1)&&(tree[s*2].c==tree[s*2+1].c))
{
tree[s].c=tree[s*2].c;
}
if(tree[s].c!=-1)
{
tree[s*2].c=tree[s].c;
tree[s*2+1].c=tree[s].c;
}
tree[s].c=-1;
int m=(tree[s].l+tree[s].r)>>1;
// cout<<m<<endl;
if(ri<=m)
{ //cout<<"is1"<<endl;
ins(le,ri,c,s*2);
}
else
if(le>m)
{
// cout<<"is 2"<<endl;
ins(le,ri,c,s*2+1);
}
else
{
ins(le,m,c,s*2);
ins(m+1,ri,c,s*2+1);
}
}
void su(int l,int r,int s)
{
// cout<<l<<" "<<r<<" "<<tree[s].l<<" "<<tree[s].r<<"is pos [s] "<<tree[s].c<<endl;
//system("pause");
if(tree[s].l==l&&tree[s].r==r&&tree[s].c!=-1)
{
// cout<<l<<" "<<" "<<r<<"is pos [s] ok "<<tree[s].c<<endl;
pos[tree[s].c]=true;
// system("pause");
return ;
}
int m=(tree[s].l+tree[s].r)>>1;
if(r<=m)
{
// cout<<"go left "<<endl;
su(l,r,s*2);
}
else
if(l>m)
{
// cout<<"go right"<<endl;
su(l,r,s*2+1);
}
else
{
// cout<<"go ledt and right"<<endl;
su(l,m,s*2);
su(m+1,r,s*2+1);
}
}
int main ()
{
int l,t,o,le,ri,co,to;
char s[2];
cin>>l>>t>>o;
// cout<<l<<endl;
build(1,l,1);
while(o--)
{
cin>>s;
if(s[0]=='C')
{
cin>>le>>ri>>co;
if(le>ri)
{
to=le;
le=ri;
ri=to;
}
// cout<<le<<" "<<ri<<" "<<co<<endl;
ins(le,ri,co,1);
// cout<<le<<" "<<ri<<" "<<co<<endl;
// for(int i=1;i<=((1<<l)-1);i++)
// { cout<<tree[i].l<<" "<<tree[i].r<<" "<<i<<" "<<tree[i].c<<endl;
// }
// system("pause");
}
else
{ tot=0;
for(int i=1;i<=t;i++)
{
pos[i]=false;
}
cin>>le>>ri;
if(le>ri)
{
to=le;
le=ri;
ri=to;
}
// for(int i=1;i<=(l*2)-1;i++)
// { cout<<tree[i].l<<" "<<tree[i].r<<" "<<i<<" "<<tree[i].c<<endl;
//}
su(le,ri,1);
// cout<<pos[1]<<"is pos 1"<<endl;
for(int i=1;i<=t;i++)
{
if(pos[i])
tot++;
}
cout<<tot<<endl;
}
}
// 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