Pagini recente » Cod sursa (job #298687) | Cod sursa (job #1191654) | Cod sursa (job #3283523) | Cod sursa (job #3284167) | Cod sursa (job #2966454)
#include <fstream>
#include <vector>
using namespace std;
const int NMAX = 100000;
int n, v[NMAX+1], s[NMAX+1], pre[NMAX+1], ret;
vector <int> sol;
int main()
{
ifstream fin("scmax.in");
ofstream fout("scmax.out");
fin >> n;
fin >> v[0];
s[0] = 2;
s[1] = 0;
for (int i = 1; i < n; i++){
fin >> v[i];
int j = s[0];
for (; j > 1; j--)
if (v[s[j-1]] < v[i]){
s[0] = max (s[0], j+1);
s[j] = i;
pre [i] = s[j-1];
break;
}
if (v[s[j]] > v[i])
{
s[j] = i;
}
}
fout << s[0] - 1<< '\n';
sol.push_back(v[s[s[0]-1]]);
int last = pre[s[s[0]-1]];
for (int i = 1; i < s[0]-1; i++){
sol.push_back(v[last]);
last = pre[last];
}
for (int i = sol.size() - 1; i>=0; i--)
fout << sol[i] << ' ';
return 0;
}