Cod sursa(job #661554)

Utilizator unsilviuContvechidontdeactivatepls unsilviu Data 14 ianuarie 2012 18:07:40
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#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;
}