Pagini recente » Autentificare | Cod sursa (job #2030019)
#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
ifstream F("scmax.in");
ofstream G("scmax.out");
int n, v[100005], poz, po, st, dr, mij, k[100005];
pair<int, int> p[100005];
stack<int> St;
int main()
{
F>>n;
for(int i = 1; i <= n; ++ i) F>>v[i];
p[1]={v[1], 1}; poz=1;
for(int i = 2; i <= n; ++ i)
{
po=-1; st=1; dr=poz;
while(st<=dr)
{
mij=(st+dr)>>1;
if(p[mij].f>=v[i]) po=mij, dr=mij-1;
else st=mij+1;
}
if(po==-1)
p[++poz]={v[i], i}, k[i]=p[poz-1].s;
else
p[po]={v[i], i}, k[i]=p[po-1].s;
}
G<<poz<<'\n';
poz=p[poz].s;
while(poz)
{
St.push(v[poz]);
poz=k[poz];
}
while(!St.empty()) G << St.top() << " ", St.pop();
return 0;
}