Pagini recente » Cod sursa (job #2577468) | Cod sursa (job #1157292) | Cod sursa (job #2319609) | Cod sursa (job #2879907) | Cod sursa (job #759174)
Cod sursa(job #759174)
#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();
}