Pagini recente » Cod sursa (job #2910179) | Cod sursa (job #581440) | Cod sursa (job #2517469) | Cod sursa (job #2734579) | Cod sursa (job #1645475)
#include <fstream>
#include <set>
using namespace std;
struct tip{
int v, l, i;
};
int a[100005];
int t[100005];
set<tip> s;
bool operator < (const tip A, const tip B) {
if(A.v == B.v)
return A.l < B.l;
return A.v > B.v;
}
ifstream f("scmax.in");
ofstream g("scmax.out");
void afis(int i) {
if(i) {
afis(t[i]);
g << a[i] << " ";
}
}
int main()
{
int n, m = 0, p; f >> n;
for(int i = 1; i <= n; i ++) f >> a[i];
tip aux;
aux.v = a[1];
aux.l = 1;
aux.i = 1;
s.insert(aux);
for(int i = 2; i <= n; i ++) {
aux.v = a[i];
set<tip>::iterator it = s.lower_bound(aux);
aux = *it;
if(aux.v < a[i])
aux.l ++;
if(aux.l > m) m = aux.l, p = i;
t[i] = aux.i;
aux.i = i;
aux.v = a[i];
s.insert(aux);
}
g << m << "\n";
afis(p); g << "\n";
return 0;
}