//这题我以为是和3670是一模一样的题目,就直接将3670的代码复制过来,点知WA了一次,然后再看看题目
//原来这一题只是求最长递增子序列就OK了,呵呵,抵死的WA,谁叫不读题!
#include <iostream>
#include <cstdio>
#include <memory.h>
#include <climits>
#include <algorithm>
using namespace std;
const int MAX = 30001;
int num[MAX], tmp[MAX];
int main()
{
int i, n, ans, left, right, mid;
scanf("%d", &n);
for (i = 0; i < n; i++){
scanf("%d", &num[i]);
}
//最长递增子序列的求解
memset(tmp, 0, sizeof(tmp));
tmp[0] = -1;
ans = 0;
for (i = 0; i < n; i++){
//这里是要判断是否有相等的,因为题目只是给出了1到3的数,而它的递增序列可以是112233这样的形式!
if (num[i] >= tmp[ans]){
tmp[++ans] = num[i];
}
else {
left = 1, right = ans;
while (left <= right){
mid = (left + right) / 2;
if (num[i] >= tmp[mid]){
left = mid + 1;
}
else{
right = mid - 1;
}
}
tmp[left] = num[i];
}
}
cout << n-ans << endl;
system("pause");
}
poj 3671 Dining Cows
最新推荐文章于 2022-01-14 15:25:45 发布