#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<algorithm>
#include<string>
#include<iomanip>
#include<queue>
using namespace std;
int a[200011],k=0,L_1=0,b[200011];
int z_b()
{
b[++L_1]=a[1];
for(int i=2;i<=k;++i)
{
if(a[i]<=b[L_1])
b[++L_1]=a[i];
else
{
int left=1,right=L_1,mid;
while(left<=right)
{
mid=(left+right)/2;
if(b[mid]>=a[i])
{
left=mid+1;
}
else
{
right=mid-1;
// ans=mid;
}
}
b[left]=a[i];
}
}
return L_1;
}
int z_s()
{
b[++L_1]=a[1];
for(int i=2;i<=k;++i)
{
if(a[i]>b[L_1])
b[++L_1]=a[i];
else
{
int left=1,right=L_1,mid;
while(left<=right)
{
mid=(left+right)/2;
if(b[mid]<a[i])
left=mid+1;
else
right=mid-1;
}
b[left]=a[i];
}
}
return L_1;
}
int main()
{
while(cin>>a[++k]);
k--;
printf("%d\n",z_b());
L_1=0;
memset(b,0,sizeof(b));
printf("%d\n",z_s());
return 0;
}
代码2为WA错解
#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<cstring>
#include<cstdlib>
#include<string>
#include<iomanip>
#include<algorithm>
using namespace std;
int L_1=0,b[200001],a[200001],k=0;
int z_b()
{
b[++L_1]=a[1];
for(int i=2;i<=k;++i)
{
if(a[i]<=b[L_1])
b[++L_1]=a[i];
else
{
int left=1,right=L_1,mid;
while(left<=right)
{
mid=(left+right)/2;
if(b[mid]>=a[i])
left=mid+1;
else
right=mid-1;
}
b[left]=a[i];
}
}
return L_1;
}
int z_s()
{
b[++L_1]=a[1];
for(int i=2;i<=k;++i)
{
if(a[i]>b[L_1])
b[++L_1]=a[i];
else
{
int left=1,right=L_1,mid;
while(left<=right)
{
mid=(left+right)/2;
if(b[mid]<a[i])
left=mid+1;
else
right=mid-1;
}
b[left]=a[i];
}
}
return L_1;
}
int main()
{
while(cin>>a[++k]);
k--;
printf("%d\n",z_s());
L_1=0;
memset(b,0,sizeof(b));
printf("%d\n",z_b());
return 0;
}
请问诸位dalao,这两个代码有什么不同???