Pagini recente » Cod sursa (job #1168093) | Cod sursa (job #2114181) | Cod sursa (job #996442) | Cod sursa (job #2130668) | Cod sursa (job #671292)
Cod sursa(job #671292)
#include <fstream>
#include <vector>
#define NMAx 100100
using namespace std;
int n,a=1,b=1,sol=1,poz,v[NMAx],best[NMAx],L[NMAx],tata[NMAx];
ofstream out("scmax.out");
int cautB(int val) {
int i,step;
for(step=1;step<b;step<<=1);
for(i=0;step;step>>=1)
if(i+step<=b&&v[L[i+step]]<val)
i+=step;
if(v[L[i]]<val)
return i;
else
return 0;
}
void afis(int i) {
if(tata[i])
afis(tata[i]);
out<<v[i]<<' ';
}
int main() {
int i,p;
ifstream in("scmax.in");
in>>n>>v[1];
best[1]=1;
L[1]=1;
for(i=2;i<=n;i++) {
in>>v[i];
p=cautB(v[i]);
tata[i]=L[p];
best[i]=p+1;
if(!L[p+1]||v[L[p+1]]>v[i])
L[p+1]=i;
if(b<p+1)
b=p+1;
if(sol<best[i]) {
sol=best[i];
poz=i;
}
}
out<<sol<<'\n';
afis(poz);
out<<v[poz]<<'\n';
out.close();
return 0;
}