Pagini recente » Cod sursa (job #1234332) | Cod sursa (job #1234336) | Cod sursa (job #1267423) | Cod sursa (job #1037562) | Cod sursa (job #1234339)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int v[100005], sol[100005], prec[100005], p;
int caut(int x){
int st = 1, dr = p, mid;
while (st + 1 < dr) {
mid = st + (dr - st) / 2;
if(v[sol[mid]] >= x) {
dr = mid - 1;
}
else
{
st = mid + 1;
}
}
return st;
}
void afisare(int x){
if(prec[x])
afisare(prec[x]);
out << v[x] << " ";
}
int main()
{
int n, i, poz;
in >> n;
for(i = 1; i <= n; i++) {
in >> v[i];
if(v[i] > v[sol[p]]) {
p++;
sol[p] = i;
prec[i] = sol[p-1];
}
else
{
poz = caut(v[i]);
sol[poz] = i;
prec[i] = sol[poz-1];
}
}
out << p << "\n";
afisare(sol[p]);
in.close();
out.close();
return 0;
}