0w1

POJ 1631 Bridging signals ( Easy LIS )

1631 -- Bridging signals
tozangezan.hatenablog.com
tozangezanさんのブログでセグメント木の問題をたくさんもらいました、ありがとうございます。でもこれだけは。。。LISだけじゃないの?と自分を疑いながらとりあえずか書いてみました。ACしました。まぁ、本気でやるならセグメント木をやってもいいけど。。

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 4e4 + 4;
const int INF = 0x3f3f3f3f;

int n;
int a[ MAXN ];

int v[ MAXN ];
void solve(){
    memset( v, INF, sizeof(v) );
    for(int i = 0; i < n; ++i){
        int idx = lower_bound( v, v + n, a[ i ] ) - v;
        v[ idx ] = a[ i ];
    }
    for(int i = n - 1; i >= 0; --i)
        if( v[ i ] < INF ){
            printf("%d\n", i + 1);
            return;
        }
}

int main(){
    int T; scanf("%d", &T);
    while( T-- ){
        scanf("%d", &n);
        for(int i = 0; i < n; ++i)
            scanf("%d", &a[ i ]);
        solve();
    }
    return 0;
}