Pagini recente » Cod sursa (job #2679583) | Cod sursa (job #83041) | Cod sursa (job #2529261) | Cod sursa (job #2765418) | Cod sursa (job #2409716)
#include<fstream>
#define DIM 100005
using namespace std;
int n, i, st, dr, mid, nr;
int v[DIM], w[DIM], t[DIM];
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void solve(int i){
if(i != 0){
solve(t[i]);
fout<< v[i] <<" ";
}
}
int main(){
fin>> n;
for(i = 1; i <= n; i++){
fin>> v[i];
}
w[1] = nr = 1;
for(i = 2; i <= n; i++){
if(v[i] > v[ w[nr] ]){
w[++nr] = i;
t[i] = w[nr - 1];
}
else{
st = 1;
dr = nr;
while(st <= dr){
mid = (st + dr) / 2;
if(v[ w[mid] ] > v[i]){
dr = mid - 1;
}
else{
st = mid + 1;
}
}
if(v[i] > v[ w[st - 1] ]){
w[st] = i;
t[i] = w[st - 1];
}
}
}
fout<< nr <<"\n";
solve(w[nr]);
return 0;
}