Cod sursa(job #1182830)

Utilizator tudormaximTudor Maxim tudormaxim Data 7 mai 2014 20:53:47
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
using namespace std;
int v[100010], p[100010], q[100010];
int bs(int dr,int x)
{
   int st = 1, ans = 0;
   while(st <= dr) {
      int mij = (st + dr)/2;
      if(q[mij] < x) {
         ans = mij;
         st = mij + 1;
      }
      else dr = mij - 1;
   }
   return ans + 1;
}
int r[1000010];
int main()
{
    ifstream in("scmax.in");
    ofstream out("scmax.out");
    int n, vf = 0;
    in >> n;
    for(int i = 1; i <= n; ++i) {
      in >> v[i];
      if(v[i] > q[vf]) {
         q[++vf] = v[i];
         p[i] = vf;
      }
      else {
         int x = bs(vf, v[i]);
         p[i] = x;
         q[x] = v[i];
      }
    }
    out << vf <<"\n";
    int vfc = vf;
    for(int i = n; i >= 1 && vf > 0; --i)
      if(p[i] == vf) {
         r[vf] = v[i];
         --vf;
      }
    for(int i = 1; i <= vfc; ++i) out << r[i] << " ";
    return 0;
}