Cod sursa(job #2341394)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 11 februarie 2019 19:45:07
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#define Dim 100006
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N,V[Dim],Q[Dim],P[3*Dim],lg,cnt;


int main()
{
    f>>N;
    for(int i=1;i<=N;i++) f>>V[i];
    lg=1;
    Q[1]=V[1];
    for(int i=2;i<=N;i++)
    {
       int st=1,dr=lg;
       int gasit=-1;
       while(st<=dr)
       {
           int mij=(st+dr)/2;
           if(V[i]<=Q[mij])
           {
               gasit=mij;
               dr=mij-1;
           }
           else
           st=mij+1;
       }
       if(gasit==-1)
       {
           lg++;
           Q[lg]=V[i];
           P[++cnt]=lg;
       }
       else
       {
           Q[gasit]=V[i];
           P[++cnt]=gasit;
       }
    }
    g<<lg<<'\n';
    for(int i=1;i<=lg;i++)
        g<<Q[i]<<" ";
    return 0;
}