POJ3670 Eating Together LIS DP

来源:互联网 发布:少儿国寿福 知乎 编辑:程序博客网 时间:2024/06/05 19:05

LIS的简化版。

#include<iostream>using namespace std;const int N=30005;int n;int data[N];int stack[N];int sp;inline void insert(int dat){int head=1,tail=sp-1;int mid;while(head<tail){mid=(head+tail)/2;if(stack[mid]<=dat){head=mid+1;}else{tail=mid;}}stack[head]=dat;}void solve(){sp=1;for(int i=1;i<=n;i++){if(data[i]>=stack[sp-1]){stack[sp++]=data[i];}else{insert(data[i]);}}int ans=sp-1;sp=1;for(int i=n;i>=1;i--){if(data[i]>=stack[sp-1]){stack[sp++]=data[i];}else{insert(data[i]);}}if(ans>sp-1)printf("%d\n",n-ans);elseprintf("%d\n",n-sp+1);}int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&data[i]);}solve();return 0;}