题意分析:
该题想考的就是差分,把干草堆当成数组,求出差分数组后,恢复为原数组,输出中间值即可
代码:
#include
#include
#include
int cmp(const void*e1,const void*e2)
{
return *(int*)e1-*(int*)e2;
}
int main()
{
int N,K;
scanf("%d%d",&N,&K);
int *ret=(int*)malloc(sizeof(int)*(N+1));
if(ret==NULL)
return 0;
memset(ret, 0, sizeof(int)*(N+1));
for(int i=0;i<K;i++) //求出差分数组
{
int A,B;
scanf("%d%d",&A,&B);
ret[A]++;
ret[B+1]--;
}
for(int i=1;i<=N;i++) //用循环将差分数组恢复为原数组
{
ret[i]=ret[i]+ret[i-1];
}
qsort(ret,N+1,sizeof(int),cmp); //使用qsort函数进行排序
printf("%d",ret[N/2+1]); //输出中间值
return 0;
}