Pagini recente » Cod sursa (job #878295) | Cod sursa (job #547768) | Cod sursa (job #2428374) | Cod sursa (job #1811927) | Cod sursa (job #1944698)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int NMAX = 100005;
const int oo = 2000000005;
int v[NMAX];
int DP[NMAX];
int previ[NMAX];
int N;
int indice;
void Read(){
in >> N;
for(int i = 1; i <= N; ++i)
in >> v[i];
}
int BinarySearch(int no){
int left = 1, right = indice;
int mid, sol = oo;
while(left <= right){
mid = (left + right) / 2;
if(no <= DP[mid]){
sol = mid;
right = mid - 1;
}
else
left = mid + 1;
}
return sol;
}
void Solve(){
int result;
for(int i = 1; i <= N; ++i){
if(!indice)
DP[++indice] = v[i];
else{
result = BinarySearch(v[i]);
if(result == oo){
DP[++indice] = v[i];
previ[indice] = indice - 1;
}
else
DP[result] = v[i];
}
}
}
void Print(){
out << indice << "\n";
for(int i = 1; i <= indice; ++i)
out << DP[i] << " ";
out << "\n";
}
int main(){
Read();
Solve();
Print();
return 0;
}