Pagini recente » Cod sursa (job #2747567) | Cod sursa (job #1175654) | Cod sursa (job #2792851) | Cod sursa (job #1048302) | Cod sursa (job #1700285)
#include <stdio.h>
#define MAX_N 100000
#define INFINIT 1000000000
int best[MAX_N];
int s[1+MAX_N];
int poz[1+MAX_N];
int last[MAX_N];
int v[MAX_N];
int rez[MAX_N];
int bsearch(int st, int dr, int val) {
int mid;
dr++;
while(dr - st > 1) {
mid = (st + dr) / 2;
if(s[mid] < val)
st = mid;
else
dr = mid;
}
return st;
}
int main() {
int n, max, i, pozMax, j;
FILE *fin = fopen("scmax.in", "r");
fscanf(fin, "%d", &n);
for(i = 0; i < n; i++) {
s[i] = INFINIT;
poz[i] = -1;
}
max = 0;
pozMax = 0;
for(i = 0; i < n; i++) {
fscanf(fin, "%d", &v[i]);
best[i] = bsearch(0 , max, v[i]) + 1;
last[i] = poz[best[i] - 1];
if(best[i] > max) {
max = best[i];
pozMax = i;
}
if(v[i] < s[best[i]]) {
s[best[i]] = v[i];
poz[best[i]] = i;
}
}
fclose(fin);
FILE *fout = fopen("scmax.out", "w");
fprintf(fout, "%d\n", max);
//for(i = 0; i < max; i++)
//fprintf(fout, "%d ", rez[i]);
fclose(fout);
return 0;
}