HDU-1050

#include
#include<string.h>
#include<algorithm>
using namespace std;
#define Maxn 500
#define swap(s,t) (s)^=(t)^=(s)^=(t);
#define INF 1<<30
int array[Maxn];
struct node 
{
int left,right;
}Node[3*Maxn];
bool cmp(node &a,node &b)
{
     return a.left<b.left;
if(a.left<b.left) {return 1;}
return a.right<b.right;
}
void Bin(node _Node[] ,int left,int right)
{
int i;
    if((right-left)==1)
{
if(_Node[left].right>=_Node[right].left){
for( i=_Node[right].left;i<=_Node[left].right;i++){array[i]++; }

}
return;
}
if(right==left){return;}
    int mid=(left+right)>>1;
Bin(_Node,left,mid);
Bin(_Node,mid+1,right);
    if(_Node[mid].right>=_Node[mid+1].left)
{
//printf("%d  %d\n",_Node[mid].right,_Node[mid+1].left);
    for(i=_Node[mid+1].left;i<=_Node[mid].right;i++)
{
array[i]++;
}
}
}
int main()
{


int n,m;
int s,t;
int i;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
memset(array,0,sizeof(array));
for( i=0;i<m;i++)
{
scanf("%d%d",&s,&t);
if(s>t){swap(s,t);}
if(s%2==0){s=s>>1;}else s=(s+1)>>1;
if(t%2==0){t=t>>1;}else t=(t+1)>>1;
Node[i].left=s;
Node[i].right=t;
}
sort(Node,Node+m,cmp);
Bin(Node,0,m-1);
int maxnum=-1;
for(i=0;i<200;i++)
{


if(array[i]>maxnum){maxnum=array[i];}
}


printf("%d\n",(maxnum+1)*10);
}


}




/*
#include<iostream>
using namespace std;
int main()
{  
int M;
   cin>>M;
   while(M--)
   {
  int i,n,k,l;              //l個需要搬動的桌子,起始n,中止k
  cin>>l;
       int id[201]={0};
  while(l--)
  {
  cin>>n>>k;
  if(n>k)
  {i=n;n=k;k=i;}             //交換小值n在前
  
           for(i=(n+1)/2;i<=(k+1)/2;i++)            //奇數偶數全加一然後除以2就是走廊號。
  id[i]++;               
  }       
       int max=0;
  for(i=0;i<201;i++)
           if(max<id[i])
 max=id[i];        //找最大值
  cout<<max*10<<endl;  
   }
return 0;
}*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章