Pagini recente » Cod sursa (job #1500017) | Profil Dumitru_Mihai_Valentin_325CB | Istoria paginii utilizator/benchea_gaby | Profil 150388 | Cod sursa (job #873695)
Cod sursa(job #873695)
#include <fstream>
#include <stack>
#define maxim(a,b) (a>b)?a:b
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int x[100005], v[100005], m[100005];
int n,i,j,p,k,maxp,stp;
stack <int> s;
int cautbin(int i,int s,int val) {
if (i == s) {
if (val > v[i]) return i+1;
else return i;
}
if (k == 0) return 1;
int mij = (i+s)/2;
if (v[mij] == val) return mij;
if (v[mij] > val) return cautbin(i,mij-1,val);
else return cautbin(mij+1,s,val);
}
int main() {
in >> n;
for (i=1;i<=n;i++) {
in >> x[i];
p = cautbin(1,k,x[i]);
k = max(k,p);
m[i] = p;
v[p] = x[i];
if (p>maxp) {
maxp = p;
stp = i;
}
}
out << k << '\n';
s.push(x[stp]);
int crt;
for (i=stp-1;i>=1;i--) {
if (x[i] < s.top() && m[i] == k-1) {
s.push(x[i]);
k--;
}
}
while (!s.empty()) {
out << s.top() << ' ';
s.pop();
}
return 0;
}