boj 24

http://acm.bupt.edu.cn/onlinejudge/newoj/showProblem/show_problem.php?problem_id=24

作为一个水货,只能水过。。。

找时间看下划分树和线段树等算法吧。。。

#include<iostream>
#include<algorithm>
using namespace std;

struct node{
	int no;
	int value;
};
node x[100002];
int tmp[100002];
int Q[5002][2];

int cmp(const node& a,const node& b)
{
	return a.value<b.value;
}
int main()
{
	int t,n,q;
	int cnt = 1;
	scanf("%d",&t);
	while(cnt<=t)
	{
		scanf("%d",&n);
		for(int i=0;i<n;i++)
		{
			x[i].no = i;
			scanf("%d",&x[i].value);
		}
		sort(x,x+n,cmp);
		scanf("%d",&q);
		printf("Case #%d:\n",cnt);
		for(int i=0;i<q;i++)
		{
			int start,end;
			scanf("%d%d",&start,&end);
			start--;
			end--;
			int num = (end-start+2)/2;
			int cntR = 0;
			for(int j=0;j<n;j++)
			{
				if(x[j].no>=start&&x[j].no<=end)
				{
					cntR++;
					if(cntR==num)
					{
						printf("%d\n",x[j].value);
						break;
					}
				}
			}
		}
		printf("\n");
		cnt++;
	}
	return 0;
}

 

你可能感兴趣的:(BO)