UVa 10635 - Prince and Princess Solution

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
    int t,n,p,q,cs=1;
    cin>>t;
    while(t--){
        cin>>n>>p>>q;
        p++,q++;
        vector<int> at(p),a(q);
        for(int i=0;i<p;i++)
            cin>>at[i];
        for(int i=0;i<q;i++){
            cin>>n;
            for(int j=0;j<p;j++){
                if(at[j]==n){
                    a[i]=j;
                    break;
                }
            }
        }
        // for(int i:a)
        //     cout<<i<<' ';
        // cout<<endl;
        n=q;
        int len=1;
        std::vector<int> b(n);
        // vector<vector<int> > c(n,vector<int>(1,0));
        b[0]=a[0];
        for(int i=1;i<n;i++){
            if(a[i]<b[0]){b[0]=a[i];/*c[0][0]=i;*/}
            else if(a[i]>b[len-1]){b[len]=a[i];/*c[len]=c[len-1];c[len].push_back(i);*/len++;}
            else {
                vector<int>::iterator it= lower_bound(b.begin(),b.begin()+len,a[i]);
                b[it-b.begin()]=a[i];
                // c[it-b.begin()]=c[it-b.begin()-1];
                // c[it-b.begin()].push_back(i);
            }
        }
        cout<<"Case "<<cs++<<": "<<len<<endl;
    // cout<<len<<endl<<"-"<<endl;
    // vector<int>::iterator it=c[len-1].begin();
    // for(;it!=c[len-1].end();it++)
    //     cout<<a[*it]<<endl;
    }
}

Comments