Pagini recente » Cod sursa (job #2877692) | Cod sursa (job #384405) | Cod sursa (job #3206325) | Cod sursa (job #211475) | Cod sursa (job #1611975)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <stack>
using namespace std;
ifstream in("subsir2.in");
ofstream out("subsir2.out");
int v[100003];
int s[100003];
int o[100003];
int k;
int main() {
int n;
in >> n;
for(int i = 0; i < n; i++) {
in >> v[i];
s[i] = -1000003;
}
for(int i = 0; i < n; i++) {
if(v[i] > s[k-1]) {
s[k++] = v[i];
o[i] = k-1;
continue;
}
if(v[i] < s[0]) {
s[0] = v[i];
o[i] = 0;
continue;
}
int poz = lower_bound(s, s+k, v[i])-s;
if(s[poz] != v[i]) {
s[poz] = v[i];
o[i] = poz;
}
}
int ct = k-1;
out << k << '\n';
stack<int> st;
for(int i = n-1; i >= 0; i--) {
if(ct == o[i]) {
st.push(i+1);
ct--;
if(ct == -1)
break;
}
}
while(!st.empty()) {
out << st.top() << " ";
st.pop();
}
return 0;
}