Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:能帮我看看吗? 你们的数据我都过了,不过还是Wa!

Posted by yzmtf2008 at 2012-09-03 16:00:45 on Problem 2777
In Reply To:Re:能帮我看看吗? 你们的数据我都过了,不过还是Wa! Posted by:liulingling at 2009-08-10 15:04:20
+++++++++++++++++++++++++++++
> #include <stdio.h>
> int L,T,Q;
> struct  Tree
> {
> 	int left;
> 	int right;
> 	int color;
> }t[500000];
> int lone(int i)
> {
> 	return  i&(i-1);
> }
> void f(int pos)
> {
> 	while(pos!=1)
> 	{
> 		int temp=pos;
> 		if(pos%2==1)pos=(pos-1)/2;
> 		else pos=pos/2;
> 		 t[pos].color=(t[pos*2+1].color)|(t[pos*2].color); 
> 	}
> }
> void build(int left,int right,int step)
> {
> 	t[step].left=left;
> 	t[step].right=right;
> 	t[step].color=1;
> 	if(left==right)return ;
> 	int mid=(left+right)/2;
> 	build(left,mid,step*2);
> 	build(mid+1,right,step*2+1);
> }
> void color(int left,int right,int step,int c)
> {
> 	int mid=(t[step].left+t[step].right)/2;
> 	if(left<=t[step].left&&right>=t[step].right)
> 	{
> 		t[step].color=c;
> 		f(step);
> 		return ;
> 	}
> 	if(t[step].color==c)return ;
> 	if(lone(t[step].color)==0)
> 	{
> 		t[step*2].color=t[step].color;
> 		t[step*2+1].color=t[step].color;
> 	}
> 	if(mid>=right)
> 	{ 
> 	    color(left,right,2*step,c);
> 	}
>     else if(mid<left) 
> 	{
> 		color(left,right,2*step+1,c);
> 	}
> 	else
> 	{
> 	  color(left,mid,2*step,c);
> 	  color(mid+1,right,2*step+1,c);	           
> 	}
> 	 t[step].color=t[step*2].color | t[step*2+1].color; 
> }
> void search(int left,int right,int step,int &cnt)
> {
> 	int mid;
>     if(left<=t[step].left&&right>=t[step].right)
>     {
>          cnt|=t[step].color;
>          return;
>     }
>     mid=(t[step].left+t[step].right)/2;
>     if(mid>=right)
> 	{search(left,right,step*2,cnt);}
>     else if(mid<left)search(left,right,step*2+1,cnt);
>     else
>     {
>      search(left,mid,2*step,cnt);
>      search(mid+1,right,2*step+1,cnt);
> 	}
> }
> int count(int c)// 统计 
> {
>    int i,cnt=0;
>    for(i=1;i<=30;i++)
>    {
>       int temp=c%2;
>       c/=2;
>       if(temp)
>       cnt++;
>    }
>    return cnt;
> }
> int main()
> {
> 	int a,b,c;
> 	char ch;
> 	scanf("%d %d %d",&L,&T,&Q);
> 	build(1,L,1);//建树
> 	while(Q--) 
> 	{
> 		getchar();
> 		scanf("%c",&ch);
> 		if(ch=='C')
> 		{ 
> 		  int p=1;
> 		  scanf("%d %d %d",&a,&b,&c);
> 		  if(a>b)
> 		  a^=b^=a^=b;
> 		  while(--c)
> 		  p*=2;
> 		  color(a,b,1,p);// 染色
> 		}
> 		else 
> 		{
> 			scanf("%d %d",&a,&b);
> 			 if(a>b)
> 		     a^=b^=a^=b;
> 			int cnt=0;
> 			search(a,b,1,cnt);
> 		//	printf("cnt : %d\n",cnt);
> 		    printf("%d\n",count(cnt));
> 		} 	
> 	}
> 	return 0;
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator