Pagini recente » Cod sursa (job #1814859) | Cod sursa (job #892194) | Cod sursa (job #2111210) | Cod sursa (job #2762077) | Cod sursa (job #815384)
Cod sursa(job #815384)
#include<stdio.h>
#define N 1000000
int v[N], pu[N], prec[N];
FILE *f, *g;
int binary(int l1,int l2, int x) {
int m;
while(l1<=l2) {
m = (l1+l2)/2;
if((x < v[pu[m]] && x > v[pu[m-1]]))
return m;
else
if(x > v[pu[m]])
l1 = m+1;
else
l2 = m-1;
}
return l2+1;
}
void print(int i) {
if(prec[i])
print(prec[i]);
fprintf(g,"%d ",v[i]);
}
int main(int argc, char* argv[2]) {
f = fopen("date.in","r");
g = fopen("date.out","w");
int lmax, i, k, n;
lmax = 0;
//citirea datelor de intrare
fscanf(f, "%d", &n);
for(i=1;i<=n;i++)
fscanf(f, "%d", &v[i]);
lmax = 0;
pu[0] = 0;
for(i=1;i<=n;i++) {
k = binary(1,lmax,v[i]);
pu[k] = i;
prec[i] = pu[k-1];
if(k > lmax)
lmax = k;
}
print(pu[lmax]);
fclose(f);
fclose(g);
return 0;
}