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

这是我AC的第一百道题目,没想到会是线段数,发个代码来庆祝一下!!!

Posted by 20055106 at 2007-09-24 20:42:03 on Problem 3264
#include<stdio.h>
#include<malloc.h>
int max(int x,int y)
{
	return x>y?x:y;
}
int min(int x,int y)
{
	return x<y?x:y;
}
struct node
{
	int min,max;
}tree[200001];
int a[50005],n;
void build(int x,int l,int r)
{
	if(l==r)
	{
		tree[x].max=tree[x].min=a[l];
		return ;
	}
	int mid=(l+r)>>1;
	build(x<<1,l,mid);
	build((x<<1)+1,mid+1,r);
	tree[x].max=max(tree[x<<1].max,tree[(x<<1)+1].max);
	tree[x].min=min(tree[x<<1].min,tree[(x<<1)+1].min);
	return ;
}
int nowmin;
int nowmax;
void getans(int x,int l,int r,int head,int end)
{
	if(l==head&&end==r)
	{
		nowmin=min(tree[x].min,nowmin);
		nowmax=max(tree[x].max,nowmax);
		return ;
	}
	int mid=(head+end)>>1;
	if(l<=mid) 
		getans(x<<1,l,min(mid,r),head,mid);
	if(r>mid) 
		getans((x<<1)+1,max(mid+1,l),r,mid+1,end);
}
int main()
{
	int m,i;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
		scanf("%d",a+i);
	a[n+1]=-(1<<30);
	a[0]=1<<30;
	build(1,1,n);
	while(m--)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		nowmax=-(1<<30);
		nowmin=1<<30;
		getans(1,x,y,1,n);
		printf("%d\n",nowmax-nowmin);
	}
	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