| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
why this program wrong answer?#include <stdio.h>
#include <stdlib.h>
#define Max 2000001
struct node
{
int x , y ;
}tree[Max];
int num[50001];
int n ,q ;
int min( int a , int b )
{
if (a < b ) return a;
return a;
}
int max( int a , int b )
{
if (a > b ) return a ;
return b;
}
void builtTree(int Node, int l , int r )
{
if ( l == r )
{
tree[Node].x = tree[Node].y = num[l];
return ;
}
int k = Node<<1;
builtTree(k,l,(l+r)/2);
builtTree(k+1,(l+r)/2+1,r);
tree[Node].x=min(tree[k].x , tree[k+1].x);
tree[Node].y=max(tree[k].y,tree[k+1].y);
}
int G_query_Max(int Node,int l , int r,int left,int right)
{
if ( l == left && r == right ) return tree[Node].y;
int mid = ( l + r ) /2 ;
if ( left > mid ) return G_query_Max(Node*2+1,mid+1,r,left,right);
else if ( right <= mid ) return G_query_Max(Node*2,l,mid,left,right);
else
{
int a = G_query_Max(Node*2,l,mid,left,mid);
int b = G_query_Max(Node*2+1,mid+1,r,mid+1,right);
return a > b ?a : b ;
}
}
int G_query_Min(int Node,int l , int r,int left,int right)
{
if ( l == left && r == right ) return tree[Node].x;
int mid = ( l + r ) /2 ;
if ( left > mid ) return G_query_Min(Node*2+1,mid+1,r,left,right);
else if ( right <= mid ) return G_query_Min(Node*2,l,mid,left,right);
else
{
int a = G_query_Min(Node*2,l,mid,left,mid);
int b = G_query_Min(Node*2+1,mid+1,r,mid+1,right);
return a > b ?b : a ;
}
}
int main()
{
scanf("%d%d",&n,&q);
int i;
for ( i = 1 ; i <= n ; i ++ ) scanf("%d",&num[i]);
builtTree(1,1,n);
printf("%d\n",tree[1].y);
for ( i = 1 ; i <= q ; i ++ )
{
int A,B;
scanf("%d%d",&A,&B);
printf("%d\n",G_query_Max(1,1,n,A,B)-G_query_Min(1,1,n,A,B));
}
//system("PAUSE");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator