Pagini recente » Cod sursa (job #1702231) | Cod sursa (job #337883) | Cod sursa (job #2492495) | Cod sursa (job #1340139) | Cod sursa (job #3004016)
#include<fstream>
using namespace std;
#define INFILE "scmax.in"
#define OUTFILE "scmax.out"
ifstream fin (INFILE);
ofstream fout (OUTFILE);
int i , n , st , dr , p , poz;
int x[100005] , v[100005] , ant[100005];
int cb (int left , int right , int c){
int poz = 0;
while (left <= right){
int mij = (left + right) / 2;
if (c > v[x[mij]]){
poz = mij;
left = mij + 1;
}
else{
right = mij - 1;
}
}
return poz;
}
void afisare (int k){
if (ant[k]){
afisare (ant[k]);
}
fout << v[k] << " ";
}
void solve(){
fin >> n;
for (i = 1 ; i <= n ; i++){
fin >> v[i];
}
x[1] = 1;
st = 1;
dr = 1;
for (i = 2 ; i <= n ; i++){
int p = cb (st , dr , v[i]);
if(p == dr){
dr++;
}
x[p+1] = i;
ant[i] = x[p];
}
fout << dr << '\n';
afisare (x[dr]);
}
int main(){
solve();
return 0;
}