您的位置:首页 > 其它

1063 sicily (木有准确理解题意,一直wrong error)——不过这事快速排序的一次复习,还是记录一下

2012-01-05 18:28 459 查看
//本博客是本人自己学习、总结的一个场所,不代表正确,请大家查阅的话,务必看清楚说明,以免耽误各位的事情。

#include <iostream>
using namespace std;
#define E 30000
#define Q 200
typedef struct node{
int id;
long s;
long long m;
}Node;
Node arr[E];
int qArr[Q];

void quickSort(int low,int high);
int partition(int low,int high);
int main()
{
int nt;
cin>>nt;
while(nt--)
{
int p,q;
cin>>p>>q;
for(int i=0;i<p;i++)
{
cin>>arr[i].id>>arr[i].s>>arr[i].m;
}
for(int i=0;i<q;i++)
{
cin>>qArr[i];
}
//对数组进行排序
quickSort(0,p-1);
for(int i=0;i<q;i++)
{
for(int j=0;j<p;j++)
{
if(arr[j].id==qArr[i])
{
if(j==0)
{
cout<<0<<" "<<p-1<<endl;
}
else
{
int k=j-1;
for(;k>=0;)
{
if(arr[j].m>arr[k].m)
{
k--;
}
else
{
break;
}

}
cout<<arr[k].id;
k=j+1;
for(;k<p;)
{
if(arr[j].m<arr[k].m)
{
k++;
}
else
{
break;
}
}
cout<<" "<<p-k<<endl;
}
}
}
}
}
return 0;
}

void quickSort(int low,int high)
{
int index;
if(low<high)
{
index=partition(low,high);
quickSort(low,index-1);
quickSort(index+1,high);
}
}
int partition(int low,int high)
{
Node temp=arr[low];
while(low<high)
{
while(low<high&&arr[high].s<temp.s)
{
high--;
}
if(low<high)
{
arr[low]=arr[high];
low++;
}
while(low<high&&arr[low].s>temp.s)
{
low++;
}
if(low<high)
{
arr[high]=arr[low];
high--;
}
}
arr[low]=temp;
return low;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: