Pagini recente » Cod sursa (job #1355552) | Cod sursa (job #1867054) | Cod sursa (job #1936225) | Cod sursa (job #1746139) | Cod sursa (job #1335074)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int i, k, n, A[100010], st, dr, mid, T[100010],D[100010];
void drum(int x)
{
if(x != 0){
drum(T[x]);
fout << A[x] << ' ';
}
}
int main()
{
fin >> n;
for(i = 1; i <= n; i ++)
fin >> A[i];
D[1] = 1;
k = 1;
for(i = 2; i <= n; i ++){
st = 1; dr = k;
while(st <= dr){
mid = (st + dr) / 2;
if(A[D[mid]] >= A[i])
dr = mid - 1;
else
st = mid + 1;
if(st > k)
{
k ++;
D[k] = i;
T[i] = D[k - 1];
}
else
{
if(A[D[st]] > A[i])
{
D[st] = i;
T[i] = D[st - 1];
}
}
}
}
fout << k << '\n';
drum(D[k]);
return 0;
}