Pagini recente » Cod sursa (job #313648) | Cod sursa (job #2421011) | Cod sursa (job #3187571) | Cod sursa (job #1982296) | Cod sursa (job #1182830)
#include <fstream>
using namespace std;
int v[100010], p[100010], q[100010];
int bs(int dr,int x)
{
int st = 1, ans = 0;
while(st <= dr) {
int mij = (st + dr)/2;
if(q[mij] < x) {
ans = mij;
st = mij + 1;
}
else dr = mij - 1;
}
return ans + 1;
}
int r[1000010];
int main()
{
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, vf = 0;
in >> n;
for(int i = 1; i <= n; ++i) {
in >> v[i];
if(v[i] > q[vf]) {
q[++vf] = v[i];
p[i] = vf;
}
else {
int x = bs(vf, v[i]);
p[i] = x;
q[x] = v[i];
}
}
out << vf <<"\n";
int vfc = vf;
for(int i = n; i >= 1 && vf > 0; --i)
if(p[i] == vf) {
r[vf] = v[i];
--vf;
}
for(int i = 1; i <= vfc; ++i) out << r[i] << " ";
return 0;
}