Pagini recente » Cod sursa (job #911187) | Cod sursa (job #1522999) | Cod sursa (job #1166657) | Cod sursa (job #1495173) | Cod sursa (job #661554)
Cod sursa(job #661554)
#include <fstream>
using namespace std;
int v[100001],p[100001],q[100001],nrp,b[100001];
int bs (int k, int lo, int hi) {
int mid=lo+(hi-lo)/2;
if (hi>=lo) {
if (p[mid]<k&&p[mid+1]>=k)
return mid+1;
else if (p[mid-1]<k&&p[mid]>=k)
return mid;
else if (p[mid]>k)
return bs(k,lo,mid-1);
else return bs(k,mid+1,hi);
}
else return -1;
}
int main() {
int n,i,r,j;
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
for (i=1; i<=n; i++)
f>>v[i];
for (i=1; i<=n; i++) {
r=bs(v[i],1,nrp);
if (r==-1) {
nrp++;
p[nrp]=v[i];
q[++q[0]]=nrp;
}
else {
p[r]=v[i];
q[++q[0]]=r;
}
}
g<<nrp<<'\n';
i=q[0];
for (j=nrp; j>=1; j--) {
while (q[i]!=j)
i--;
b[j]=v[i];
}
for (i=1; i<=nrp; i++)
g<<b[i]<<' ';
g<<'\n';
g.close();
return 0;
}