Pagini recente » Cod sursa (job #1607961) | Cod sursa (job #697805) | Cod sursa (job #1836168) | Cod sursa (job #2230067) | Cod sursa (job #542716)
Cod sursa(job #542716)
#include <vector>
#include <fstream>
#include <iostream>
#define max(a, b) (a) > (b) ? (a) : (b)
using namespace std;
vector<int> subsir(int* v, int n)
{
int* sir;
int current;
sir = new int[n];
for (int i = 0; i < n; i++)
{
sir[i] = 1;
for (int k = i - 1; k >= 0; k--)
if (v[k] < v[i] && sir[i] < sir[k] + 1)
sir[i] = sir[k] + 1;
current = max(sir[i], current);
}
vector<int> ret;
for (int i = n - 1; i >= 0 && current >= 1; i--)
if (sir[i] == current)
{
ret.insert(ret.begin(), v[i]);
current--;
}
delete [] sir;
return ret;
}
int main(int argc, char* argv[])
{
ifstream file("scmax.in", ifstream::in);
int n;
int *v;
file >> n;
v = new int[n];
for (int i = 0; i < n; i++)
file >> v[i];
file.close();
ofstream out("scmax.out", ofstream::out);
vector<int> sir = subsir(v, n);
out << (int) sir.size() << endl;
for (vector<int>::iterator it = sir.begin(); it != sir.end(); it++)
out << *(it) << " ";
out.flush();
out.close();
return 0;
}