| ||||||||||
| 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 | |||||||||
WHY TLE??#include <iostream>
using namespace std;
struct node {
long l,r;
long color;
long ans;
};
node tree[300010];
long twice[31];
long L,n,T,ans,ccount;
long start,ended,color,total;
void init()
{
long i;
twice[0]=1;
for (i=1;i<31;i++) twice[i]=2*twice[i-1];
}
long build_tree(long b,long e)
{
long mark,mid;
if (b==e) {
tree[ccount].color=0; tree[ccount].ans=0;
tree[ccount].l=-1; tree[ccount].r=-1; ccount++;
return ccount-1;
}
mark=ccount; ccount++; mid=(b+e)/2;
tree[mark].color=0; tree[mark].ans=0;
tree[mark].l=build_tree(b,mid);
tree[mark].r=build_tree(mid+1,e);
return mark;
}
void paint(long b,long e,long k)
{
long l,r,mid;
if (ended<b||start>e) return;
if (color==tree[k].color) return;
if (start<=b&&ended>=e) {
tree[k].color=color; tree[k].ans=twice[color-1];
return;
}
l=tree[k].l; r=tree[k].r;
if (tree[k].color!=-1) {
tree[l].color=tree[k].color; tree[l].ans=tree[k].ans;
tree[r].color=tree[k].color; tree[r].ans=tree[k].ans;
tree[k].color=-1;
}
mid=(b+e)/2;
paint(b,mid,l); paint(mid+1,e,r);
tree[k].ans=tree[l].ans|tree[r].ans;
if (tree[l].color==tree[r].color&&tree[l].color!=-1) tree[k].color=tree[l].color;
}
void ask(long b,long e,long k)
{
long mid;
if (ended<b||start>e) return;
if (start<=b&&ended>=e) {total=total|tree[k].ans; return;}
if (tree[k].color!=-1) {total=total|tree[k].ans; return;}
mid=(b+e)/2;
ask(b,mid,tree[k].l); ask(mid+1,e,tree[k].r);
}
void work()
{
long i,j,t;
char temp;
ccount=0;
build_tree(0,L-1);
tree[0].color=1; tree[0].ans=1;
for (i=0;i<n;i++) {
cin >> temp >> start >> ended;
if (start>ended) {t=start; start=ended; ended=t;}
start--; ended--;
if (temp=='C') {
cin >> color;
paint(0,L-1,0);
}
if (temp=='P') {
total=0; ask(0,L-1,0); ans=0;
for (j=0;j<T;j++) if ((total&twice[j])!=0) ans++;
cout << ans << endl;
}
}
}
int main()
{
while (cin >> L >> T >> n)
{
init();
work();
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator