【二分】递增(luogu 3902)
生活随笔
收集整理的這篇文章主要介紹了
【二分】递增(luogu 3902)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
遞增
luogu 3902
題目大意:
給出一個序列,問最少修改多少個數(shù)字可以使他單調(diào)遞增
輸入樣例
3 1 3 2輸出樣例
1數(shù)據(jù)范圍
對于50% 的數(shù)據(jù),N≤103N \le 10^3N≤103
對于100% 的數(shù)據(jù),1≤N≤105,1≤Ai≤1091 \le N \le 10^5 , 1 \le A_i \le 10^91≤N≤105,1≤Ai?≤109
解題思路:
就是求最長上升子序列,但因為數(shù)據(jù)太大,所以要用o(nlogn)o(n\ log\ n)o(n?log?n)的方法,具體實現(xiàn)見代碼
代碼:
#include<cstdio> using namespace std; int n,x,num,l,r,mid,a[100100]; int main() {scanf("%d",&n);scanf("%d",&a[++num]);for (int i=2;i<=n;++i){scanf("%d",&x);if (x>a[num]) a[++num]=x;//比最大的大就直接加else{l=1;r=num;while(l<r)//找不大于x的數(shù)中最大的{mid=(l+r)>>1;//二分if (a[mid]<=x) l=mid+1;else r=mid;}a[l]=x;//替換}}printf("%d",n-num); }總結(jié)
以上是生活随笔為你收集整理的【二分】递增(luogu 3902)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【差分】Tallest Cow(poj
- 下一篇: 【模拟】杯子