Cod sursa(job #2180717)

Utilizator marius.onescuMarius marius.onescu Data 21 martie 2018 07:31:17
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<bits/stdc++.h>
using namespace std;
const int N=100020;
int l=1, a[N], p[N], q[N], s[N];
void caut(int i){
	int st=1, x=a[i], dr=l, m=(st+dr)/2;
	while(st<dr){
		if(q[m]<=x)st=m+1;else dr=m;
		m=(st+dr)/2;
	}
	if(q[m]<=x)m++;
	while(q[m-1]>x)m--;
	if(m==l+1){
		l++, q[l]=x, p[i]=l;
		return;
	}
	q[m]=x, p[i]=m; 
}
int main(){
	ifstream f("scmax.in");
	ofstream g("scmax.out");
	int n, mx=1;
	f>>n;
	f>>a[1];
	q[1]=a[1];
	p[1]=1;
	for(int i=2;i<=n;i++){
		f>>a[i];
		caut(i);
		if(p[i]>=p[mx])mx=i;
	}
	g<<l<<'\n';
	int l1=l;
	for(int i=mx;i>=1;i--){
		if(p[i]==l)s[l--]=a[i];
	}
	for(int i=1;i<=l1;i++)g<<s[i]<<' ';
}