Pagini recente » infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #865333) | Cod sursa (job #128362) | Cod sursa (job #3292326) | Cod sursa (job #2762440)
#include <fstream>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int n, a[100001], nr, dp[100001], k, v[100001], ck;
void read()
{
in >> n;
for (int i=1; i<=n; i++)
in >> a[i];
}
int cautare_binara(int x)
{
int st, dr, mij;
st=1;
dr=k;
while (st<=dr)
{
mij=(st+dr)/2;
if (v[mij]>=x) dr=mij-1;
else st=mij+1;
}
v[st]=x;
return st;
}
void solve()
{
for (int i=1; i<=n; i++)
if (a[i]>v[k])
{
dp[i]=k+1;
v[++k]=a[i];
}
else
dp[i]=cautare_binara(a[i]);
}
void output()
{
out << ck << '\n';
for (int i=1; i<=k; i++)
out << v[i] <<" ";
}
int main()
{
read();
solve();
output();
return 0;
}