Pagini recente » Cod sursa (job #941921) | Cod sursa (job #303413) | Cod sursa (job #2696925) | Cod sursa (job #1033642) | Cod sursa (job #2336060)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout("scmax.out");
const int N_MAX = 100000 + 5;
int x[N_MAX], p[N_MAX], a[N_MAX], scmax;
int n;
bool cmp(int a, int b){
return (x[a] < x[b]);
}
void print(int ind){
if(ind != 0){
print(p[ind]);
fout << x[ind] << " ";
}
}
int main(){
fin >> n;
for(int i = 1; i<=n; ++i){
fin >> x[i];
}
for(int i = 1; i<=n; ++i){
int poz = lower_bound(a + 1, a + scmax + 1, i, cmp) - a; // nu se putea pune n fiindcă își dădea seama că nu tot șitul este sortat și se oprea
scmax = max(scmax, poz);
p[i] = a[poz-1];
a[poz] = i; // în vectorul a se vor pune indicii, pentru a recreea drumul
}
fout << scmax << "\n";
print(a[scmax]);
return 0;
}
// român convertit la moldovenism