运行不了
a[a_len]=p;
什么意思,指针没赋值就引用。
搞这么复杂干吗,用个静态数组就好了
	
	
	      a[a_len]=p;
什么意思,指针没赋值就引用。
搞这么复杂干吗,用个静态数组就好了
 程序代码:
程序代码:#include<stdio.h> 
int main(void) 
{ 
    int i,j,k,k1,x,n,m,max_len=0,max,a_len=0; 
    int y,a[100]={0},p[100]; 
 
    while(1) 
      { 
       scanf("%d",&y); 
       if(y==-1)break; 
       a[a_len]=y; 
       a_len++; 
      } 
 
 
 
    for(k=0;k<a_len-2;k++) 
      { 
       x=a[k]; 
       n=1; 
       for(i=k+1;i<a_len-1;i++) 
    { 
     if(x>a[i]) 
       { 
        m=a[i]; 
        n=2; 
        for(j=i+1;j<a_len;j++) 
          { 
          if(m>a[j]) 
        { 
         n++; 
         m=a[j]; 
        } 
          } 
       } 
     if(max_len<n) 
        { 
         max_len=n; 
         m=p[0]=max=a[k]; 
         for(j=i,k1=1;j<a_len;j++) 
           { 
        if(m>a[j]) 
          { 
           p[k1]=a[j]; 
           m=a[j]; 
           k1++; 
          } 
           } 
         if(k<a_len) 
           p[k1]=-1; 
        } 
     if((a_len-i-1)<n)break; 
    } 
    if(a_len-2-k<max_len)break; 
       } 
 
 
    printf("%d\n",max_len); 
    for(i=0;i<a_len;i++) 
      { 
       if(p[i]==-1)break; 
       printf("%d ",p[i]); 
      } 
    printf("\n\n"); 
 
    getch(); 
    return 0; 
} 

 程序代码:
程序代码:#include <stdio.h>
#include <stdlib.h>
#define N ((int)1e6 + 1)
int n, a[N], bn, b[N], c[N], d[N];
int main(void)
{
    int i, cur;
    while (scanf("%d", &n) == 1)
    {
        for (i = 0; i < n; ++i)
            scanf("%d", &a[i]);
        for (i = 0, bn = -1; i < n; ++i)
        {
            if (bn == -1 || a[i] <= b[bn])
                b[cur = ++bn] = a[i];
            else
            {
                int low = 0, high = bn, mid;
                while (mid = (low + high) >> 1, low + 1 < high)
                {
                    if (a[i] < b[mid])
                        low = mid;
                    else if (a[i] >= b[mid])
                        high = mid;
                }
                if (b[low] <= a[i])
                    b[cur = low] = a[i];
                else
                    b[cur = high] = a[i];
            }
            c[cur] = i;
            d[i] = cur ? c[cur - 1] : -1;
        }
        cur = c[bn];
        for (i = bn; i >= 0; --i)
        {
            b[i] = a[cur];
            cur = d[cur];
        }
        for (i = 0; i <= bn; ++i)
            printf("%d ", b[i]);
        putchar('\n');
    }
    return 0;
}
/* cc: run += '<in' */