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

按x-y 升序sort 然后二分查找求出下标,2个下标中较小的大小,是不是就是位于当前星星左下方的个数?

Posted by xiaomao520 at 2018-10-14 15:57:49 on Problem 2352
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>

#define N 15005

using namespace std;

typedef struct node
{
	int x,y;
}Node;

Node a[N],b[N];

int ans[N];


int cmp1(const void *a,const void *b)
{
	Node *q1 = (Node*)a;
	Node *q2 = (Node*)b;
	if(q1->x != q2->x) 
		return q1->x - q2->x;
	return q1->y - q2->y;

}


int search(Node a[],int left,int right,Node val)
{
	int mid;
	while(left <= right)
	{
		mid = (left+right)/2;
		if(a[mid].x < val.x)
			left = mid + 1;
		else if(a[mid].x > val.x)
			right = mid - 1;
		else
			break;
	}
	while(a[mid].y != val.y)
	{
		if(a[mid].y > val.y)
			mid--;
		else
			mid++;
	}
	return mid;
}


int main()
{
	int i,n,x,y,k;
	while(scanf("%d",&n) != EOF)
	{
		memset(ans,0,sizeof(ans));
		for(i = 0;i < n;i++)
		{
			scanf("%d%d",&a[i].x,&a[i].y);
			b[i] = a[i]; 
		}
		
		qsort(b,n,sizeof(Node),cmp1);
		

		
		for(i = 0;i < n;i++)
		{
			k = search(b,0,n-1,a[i]);
			k = k > i ? i : k;
			ans[k]++;
		}
		for(i = 0;i < n;i++)
		{
			cout << ans[i] << endl;
		}
	}
}



















































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