PowerOj 2846 防不住AK的防AK

#include "bits/stdc++.h"
using namespace std;
int a[200004];
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int n;
    while(~scanf("%d",&n))
    {
        for (int i = 0; i < n; ++i) {
            scanf("%d",&a[i]);
        }
        vector<int> v;//表示每组最大的数
        v.push_back(a[0]);
        for (int i = 1; i < n; ++i) {
            int l = 0, r = v.size() - 1;
            int ans = -1;
            while(l <= r)//二分查找第一个比a[i]小的
            {
                int mid = ( l + r ) >> 1;
                if(v[mid] <= a[i]){
                    ans = mid;
                    r = mid - 1;
                }
                else l = mid + 1;
            }
            if(ans == -1){
                v.push_back(a[i]);
            }
            else
            {
                v[ans]=a[i];
            }
        }
        printf("%d\n",v.size());
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42671946/article/details/88945495