Pagini recente » Istoria paginii problema/petarbore | Pioni | Cod sursa (job #1166735) | Cod sursa (job #2241509)
#include <bits/stdc++.h>
using namespace std;
int n,dp[100001],a[100001],v[100001],k=0;
int cautbin(int st,int dr,int x);
stack <int> st;
int main()
{int i,x,poz;
ifstream in("scmax.in");
ofstream out("scmax.out");
in>>n;
for (i=1;i<=n;i++)
{
in>>a[i];
}
for (i=1;i<=n;i++)
{
if (a[i]>a[dp[k]])
{
dp[++k]=i;
v[a[i]]=dp[k-1];
}
else
{
poz=cautbin(1,k,a[i]);
dp[poz]=i; ///cea mai din stanga pozitie mij>=x
v[a[i]]=dp[poz-1];
}
}
poz=dp[k];
out<<k<<"\n";
v[4];
while (k>0)
{
st.push(a[poz]);
poz=v[a[poz]];
k--;
}
while (!st.empty())
{
out<<st.top()<<" ";
st.pop();
}
out<<"\n";
}
int cautbin(int st,int dr,int x)
{int mij,last;
while (st<=dr)
{
mij=(st+dr)/2;
if (a[dp[mij]]>=x)
{
last=mij;
dr=mij-1;
}
else
st=mij+1;
}
return last;
}