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

首先庆祝用漂浮法模拟过了,还很快,188MS~~~~~然后悲剧用离散化+线段树挂了,求解~

Posted by ccyjava at 2010-11-20 11:50:37 on Problem 2528
下面是过的代码,用的漂浮法,从USACO上那个矩形切割得到的灵感
#include "stdio.h"
#include "string.h"

int x[10001];
int y[10001];
int n;
int ans[10001];
void cover(int l,int r,int k,int c){
	while(k<n&&(r<x[k]||l>y[k])){
		k++;
	}
	if(k>=n){
		ans[c]+=r-l+1;
		return;
	}
	if(l<x[k]){
		cover(l,x[k]-1,k+1,c);
		l=x[k];
	}
	if(r>y[k]){
		cover(y[k]+1,r,k+1,c);
		r=y[k];
	}
}
int main(){
	int t,i,j;
	int sum;
	scanf("%d",&t);
	while(t--){
		sum=0;
		memset(ans,0,sizeof(ans));
		scanf("%d",&n);
		for(i=0;i<n;i++){
			scanf("%d%d",&x[i],&y[i]);
		}
		for(i=n-1;i>=0;i--){
			cover(x[i],y[i],i+1,i);
		}
		for(i=0;i<n;i++){
			if(ans[i]>0)
				sum++;
		}
		printf("%d\n",sum);
	}
	return 0;

}

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