入门LIS。练习题
#include<iostream>
using namespace std;
int n,temp,k=1;
int dp[10005];
void myswap(int m)
{
for(int i=1;i<k;i++)
{
if(i!=k-1)
{
if(i%2)//基数位置
{
if(temp>=dp[i-1]&&temp>=dp[i+1])
{
dp[i]=temp;
}
}
else//偶数位置
{
if(temp<=dp[i-1]&&temp<=dp[i+1])
{
dp[i]=temp;
}
}
}
else
{
if(i%2)//基数位置
{
if(temp>=dp[i-1])
{
dp[i]=temp;
}
}
else//偶数位置
{
if(temp<=dp[i-1])
{
dp[i]=temp;
}
}
}
}
}
int main()
{
cin>>n;
dp[0]=-1;
for(int i=1;i<=n;i++)
{
cin>>temp;
if(k%2)//基数位置
{
if(temp>dp[k-1])
{
dp[k++]=temp;
}
myswap(temp);
}
else//偶数位置
{
if(temp<dp[k-1])
{
dp[k++]=temp;
}
myswap(temp);
}
}
cout<<k-1<<endl;
return 0;
}