Pagini recente » Cod sursa (job #2980238) | Cod sursa (job #402134) | Cod sursa (job #159900) | Cod sursa (job #1295333) | Cod sursa (job #1423745)
#include<fstream>
using namespace std;
int n, i, nr, p, u, mid;
int v[100001], w[100001], t[100001];
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void drum(int p){
if(p != 0){
drum(t[p]);
fout<< v[p] <<" ";
}
}
int main(){
fin>> n;
for(i = 1;i <= n; i++){
fin>> v[i];
}
w[1] = 1;
nr = 1;
for(i = 2; i <= n; i++){
if(v[w[nr]] < v[i]){
nr++;
w[nr] = i;
t[i] = w[nr-1];
}
else{
p = 1;
u = nr;
while(p <= u){
mid = (p + u) / 2;
if(v[w[mid]] > v[i]){
u = mid - 1;
}
else{
p = mid + 1;
}
}
if (v[i] > v[ w[p-1] ]) {
w[p] = i;
t[i] = w[p-1];
}
}
}
fout<< nr <<"\n";
drum(w[nr]);
return 0;
}