| ||||||||||
| 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 | |||||||||
怎么可能会是Runtime Error???In Reply To:哪位大牛能看一下我的这个程序为什么会Runtime Error !!! 感激不尽 !!!!! Posted by:cfdream at 2007-09-18 20:16:30 > #include<stdio.h>
>
> #define N 100010
>
> struct NODE{
> int b,e,l,r;
> int number, last ;
> } node[N*4+1] ;
>
> int len,data[N];
>
> int build(int a,int b)
> {
> int temp=len , mid=(a+b)/2 ;
> node[temp].b=a , node[temp].e=b ;
> len++;
> if(a==b)
> {
> node[temp].number=1;
> node[temp].last=1;
> // node[temp].l=node[temp].r
> return temp;
> }
> node[temp].l=build(a,mid);
> node[temp].r=build(mid+1,b);
> int left_c=node[temp].l , right_c=node[temp].r , p , lcount =0 ,rcount=0 , rec , max=0 ;
> rec=data[mid];
> p=mid;
> while(p>=a&&data[p]==rec) { p-- , lcount++; }
> node[left_c].last=lcount;
> rec=data[mid+1];
> p=mid+1;
> while(p<=b&&data[p]==rec) { p++ , rcount++; }
> node[right_c].last=rcount;
> if(data[mid]==data[mid+1])
> {
> max=lcount+rcount;
> }
> if(node[left_c].number>max) max=node[left_c].number;
> if(node[right_c].number>max) max=node[right_c].number;
> node[temp].number=max;
> return temp;
> }
>
> int query(int index , int a , int b)
> {
> int begin=node[index].b , end=node[index].e , mid = (begin+end) / 2 ;
> if(a==begin && b==end)
> return node[index].number;
> if(a>mid) return query( node[index].r , a , b);
> if(b<mid+1) return query( node[index].l , a , b);
> int temp1,temp2,max;
> if(node[index].l>0) temp1 = query( node[index].l , a , mid);
> if(node[index].r>0) temp2 = query( node[index].r , mid+1, b);
> max = temp1>temp2 ? temp1:temp2;
> if(data[mid]!=data[mid+1])
> return max;
> temp1= node[node[index].l].last > (mid-a+1) ? (mid-a+1) : node[node[index].l].last ;
> temp2= node[node[index].r].last > (b-mid) ? (b-mid) : node[node[index].r].last ;
> if(max<temp1+temp2) max=temp1+temp2;
> return max;
> }
>
> int main()
> {
> int i,n,q,a,b;
> while(scanf("%d",&n)==1 && n)
> {
> scanf("%d",&q);
> for(i=0;i<n;i++) scanf("%d",&data[i]);
> build(0,n-1);
> while(q--)
> {
> scanf("%d%d",&a,&b);
> printf("%d\n", query(0,a-1,b-1));
> }
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator