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 |
第一次写线段树一次就ac了!!!但是2016ms好慢!附代码!!!#include <stdio.h> #define len 50010 typedef struct node { int lchild; int rchild; int max; int min; }Node; Node a[len*6]; int data[len]; int MAX(int a,int b) { return a>b?a:b; } int MIN(int a,int b) { return a>b?b:a; } int bulitmax(int s,int e,int step) { int mid; a[step].lchild=s; a[step].rchild=e; if(s==e) { a[step].max=data[s]; return data[s]; } else { mid=(s+e)>>1; a[step].max=MAX(bulitmax(s,mid,2*step),bulitmax(mid+1,e,2*step+1)); return a[step].max; } } int bulitmin(int s,int e,int step) { int mid; if(s==e) { a[step].min=data[s]; return data[s]; } else { mid=(s+e)>>1; a[step].min=MIN(bulitmin(s,mid,2*step),bulitmin(mid+1,e,2*step+1)); return a[step].min; } } void print(int s,int e,int step) { int mid; if(s==e) { printf("%d %d %d %d %d\n",step,a[step].lchild,a[step].rchild,a[step].max,a[step].min); return ; } else { mid=(s+e)>>1; print(s,mid,2*step); print(mid+1,e,2*step+1); printf("%d %d %d %d %d\n",step,a[step].lchild,a[step].rchild,a[step].max,a[step].min); } } int querymax(int s,int e,int step) { int mid; if(a[step].lchild==s&&a[step].rchild==e) return a[step].max; else { mid=(a[step].lchild+a[step].rchild)>>1; if(s>mid) return querymax(s,e,2*step+1); else if(e<=mid) return querymax(s,e,2*step); else return MAX(querymax(s,mid,2*step),querymax(mid+1,e,2*step+1)); } } int querymin(int s,int e,int step) { int mid; if(a[step].lchild==s&&a[step].rchild==e) return a[step].min; else { mid=(a[step].lchild+a[step].rchild)>>1; if(s>mid) return querymin(s,e,2*step+1); else if(e<=mid) return querymin(s,e,2*step); else return MIN(querymin(s,mid,2*step),querymin(mid+1,e,2*step+1)); } } int main() { int n,m,i,s,e; while(scanf("%d %d",&n,&m)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&data[i]); bulitmax(1,n,1); bulitmin(1,n,1); // print(1,n,1); while(m--) { scanf("%d %d",&s,&e); printf("%d\n",querymax(s,e,1)-querymin(s,e,1)); } } return 1; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator