Cod sursa(job #759174)

Utilizator iris88Nagy Aliz iris88 Data 16 iunie 2012 23:34:38
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <limits.h>
#include <stack>
#define NMAX 100010
using namespace std;

int vect[NMAX];
int secv[NMAX];
int p[NMAX];
int pr[NMAX];
stack<int> s;
int main()
{
  ifstream f("scmax.in",ios::in);
  ofstream g("scmax.out",ios::out);
  int n,m;
  f>>n;
  for (int i=0;i<n;i++)
    f>>vect[i];
  secv[0] = 0;
  int msecv = 1;
  for (int i=1;i<n;i++)
  {
    int k1 = -1;int k2 = msecv;
    int ind = 0;
    while (k1<k2-1)
    {
      int mij = (k1+k2)/2;
      if (vect[i]>vect[secv[mij]])
      {
        k1 = mij;
      }
      else k2=mij;
    }    
    secv[k2] = i;
    p[i] = secv[k1];
    if (k2>=msecv) msecv = k2+1;
  }
  g<<msecv<<endl;
  int index = secv[msecv-1];
  s.push(index);
  for (int i=1;i<msecv;i++)
  {    
    index = p[index];
    s.push(index);
  }
  for (int i=0;i<msecv;i++){
    int index  = s.top();s.pop();
    g<<vect[index]<<"\n";
  }
  f.close();
  g.close();
}