Pagini recente » Cod sursa (job #667483) | Cod sursa (job #2416497) | Cod sursa (job #583955) | Cod sursa (job #1217156) | Cod sursa (job #1504050)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n; ///numarul de numere
int v[100005]; ///sirul de numere
int dp[100005]; ///dp[i] = subsirul crescator maximal care se termina cu elementul v[i]
int t[100005]; ///t[i] = elementul anterior din subsirul crescator
void write(int p) {
if (t[p] != -1) ///daca nu am ajuns la finalul subsirului
write(t[p]); /// vom merge pana la inceputul subsirului
fout << v[p] << " "; ///afisarea se va face invers, adica de la inceput la final
}
int main() {
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> v[i]; ///citirea datelor
dp[i] = 1;
t[i] = -1;
}
for (int i = 1; i <= n; ++i)
for (int j = 1; j < i; ++j)
if (v[j] < v[i] && dp[i] < dp[j] + 1) {
dp[i] = dp[j] + 1;
t[i] = j;
}
int sol = 1, poz = 1;
for (int i = 1; i <= n; ++i)
if (sol < dp[i]) {
sol = dp[i];
poz = i;
}
fout << sol << "\n";
write(poz);
} /// sergiu.ml/~tudor/emag