poj 3670

递增或递减序列。

代码:

#include<iostream>
#include<fstream>

using namespace std;

int a[30001];
int n;
int b[30001];
int c[30001];

int find(int s,int value){
	int i=0,k;
	while(i<=s)
	{
		k=(i+s)>>1;
		if(b[k]<value) s=k-1;
		else i=k+1;
	}
	return s;
}

int find1(int s,int value){
	int i=0,k;
	while(i<=s)
	{
		k=(i+s)>>1;
		if(b[k]>value) s=k-1;
		else i=k+1;
	}
	return s;
}


void read(){
//	ifstream cin("in.txt");
	int i,j,k,m,m1;
	
		cin>>n;
		for(i=0;i<n;i++)
			cin>>a[i];
		m=0;
		b[0]=a[0];
		for(i=1;i<n;i++)
		{
			j=find(m,a[i]);
			b[j+1]=a[i];
			if(j+1>m) m=j+1;
		}
		m1=0;
		c[0]=a[0];
		for(i=1;i<n;i++)
		{
			j=find1(m1,a[i]);
			c[j+1]=a[i];
			if(j+1>m1) m1=j+1;
		}
		cout<<n-max(m,m1)-1<<endl;
		
}

int main(){
	read();
	return 0;
}

posted on 2011-04-16 20:44  宇宙吾心  阅读(314)  评论(0)    收藏  举报

导航