Pagini recente » Cod sursa (job #2264797) | Cod sursa (job #1422136) | Cod sursa (job #1379476) | Cod sursa (job #1794437) | Cod sursa (job #2107201)
#include <iostream>
#include<vector>
#include<fstream>
#define nn 100001
#include<stack>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[nn],i,n;
int binar (int arr[],vector<int> &indici,int l,int r,int key)
{
while(r-l>1)
{
int m=l+(r-l)/2;
if(arr[indici[m]]>=key)
r=m;
else l=m;
}
return r;
}
int main ()
{
f>>n;
for(i=0;i<n;i++)
f>>v[i];
vector<int>idici(n,0);
vector<int>fost(n,-1);
int lungime =1;
for(i=1;i<n;i++)
{
if(v[i]<v[idici[0]])idici[0]=i;
else if (v[i]>v[idici[lungime-1]])
{
fost[i]=idici[lungime-1];
idici[lungime++]=i;
}
else {
int pos =binar(v,idici,-1,lungime-1,v[i]);
fost[i]=idici[pos-1];
idici[pos]=i;
}
}
stack<int>s;
for(int i=idici[lungime-1];i>=0;i=fost[i])
s.push(v[i]);
g<<s.size()<<endl;
while(s.size()!=0)
{
g<<s.top()<<" ";
s.pop();
}
}