Cod sursa(job #1448251)
| Utilizator | Data | 6 iunie 2015 15:10:48 | |
|---|---|---|---|
| Problema | Subsir crescator maximal | Scor | 65 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.74 kb |
#include<fstream>
using namespace std;
int t[100003], n, x[100003], p, u, mij, i, nr, sol[100003];
ifstream in("scmax.in");
ofstream out("scmax.out");
void drum(int nr){
if(nr!=0){
drum(t[nr]);
out<<x[sol[nr]]<<" ";
}
}
int main(){
in>>n;
for(i=1; i<=n; i++)
in>>x[i];
for(i=1; i<=n; i++){
p=1; u=nr;
while(p<=u){
mij=p+(u-p)/2;
if(x[i]<=x[sol[mij]])
u=mij-1;
else
p=mij+1;
}
if(x[i]<x[sol[p]]){
sol[p]=i;
t[p]=p-1;
}
if(p>nr){
sol[++nr]=i;
t[p]=p-1;
}
}
out<<nr<<"\n";
drum(nr);
return 0;
}
