Pagini recente » Cod sursa (job #2662766) | Cod sursa (job #2142570) | Cod sursa (job #2124646) | Cod sursa (job #1128360) | Cod sursa (job #572080)
Cod sursa(job #572080)
#include <fstream>
int n, tomb[100003], p[100003], maximum, k, hosszusag[100003], szam;
using namespace std;
ofstream g("scmax.out");
void kiiras(int i) {
if (p[i] > 0) kiiras(p[i]);
g<<tomb[i]<<" ";
}
int keres(int keresett) {
int elso, utolso, kozepso;
elso = 0; utolso = szam; kozepso = (elso+utolso)/2;
while (elso <= utolso) {
if (tomb[hosszusag[kozepso]] < keresett && tomb[hosszusag[kozepso+1]] >= keresett) return kozepso;
else if (tomb[hosszusag[kozepso+1]] < keresett) {elso = kozepso + 1; kozepso = (elso + utolso)/2;}
else {utolso = kozepso - 1; kozepso = (elso + utolso)/2;}
}
return szam;
}
int main(){
ifstream f("scmax.in");
int i, j, pozicio, best[100003]={0};
szam = 1;
f>>n;
for (i = 1; i <= n; i++)
f>>tomb[i];
best[1] = hosszusag[1] = 1; hosszusag[0] = 0;
for (i = 2; i <= n; i++) {
pozicio = keres(tomb[i]);
p[i] = hosszusag[pozicio];
best[i] = pozicio + 1;
hosszusag[pozicio + 1] = i;
if (szam < pozicio + 1) szam = pozicio + 1;
}
maximum = 0; pozicio = 0;
for (i = 1; i <= n; i++)
if (maximum < best[i]) {
maximum = best[i]; pozicio = i;
}
g<<maximum<<'\n';
kiiras(pozicio);
}