Pagini recente » Cod sursa (job #1971339) | Cod sursa (job #1342230) | Cod sursa (job #1116864) | Cod sursa (job #2918874) | Cod sursa (job #2458333)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream fin("subsir2.in");
ofstream fout("subsir2.out");
long long n, v[5005], b[5005], l[5005], p[5005], i, bn, j, k, aux;
fin >> n;
v[0] = b[0] = l[0] = p[0] = bn = 0;
for(i = 1; i <= n; ++i) {
fin >> v[i]; v[i] += 1000005;
j = 1; k = bn;
while(j <= k) {
aux = (j + k) / 2;
if(v[i] < v[b[aux]]) k = aux - 1;
else j = aux + 1;
}
p[i] = b[j-1];
b[j] = i;
l[i] = j;
bn = max(bn, j);
}
(fout << bn).put('\n');
for(i = n; i >= 1; --i)
if(l[i] == bn)
break;
k = 0;
while(i) {
b[k++] = i;
i = p[i];
}
for(i = k - 1; i >= 0; --i)
(fout << b[i]).put(' ');
return 0;
}