Pagini recente » Cod sursa (job #295404) | Cod sursa (job #293754) | Cod sursa (job #912725) | Cod sursa (job #118679) | Cod sursa (job #812215)
Cod sursa(job #812215)
#include<stdlib.h>
#include<stdio.h>
FILE *g;
void afisare(int nr, int P[],int n, int V[]) {
int i,contor=1;
fprintf(g,"%i\n", nr);
for(i=1;contor<=nr;i++)
if(P[i]==contor)
{
fprintf(g,"%i ", V[i]);
contor++;
}
}
int pozitie(int x, int Q[], int *nr) {
int p,u,m;
p=0; u=*nr; m=(u+p)/2;
if(Q[*nr]<x) {
*nr=*nr+1;
return *nr;
}
while(p<=u) {
if(Q[m] < x && Q[m+1] >= x)
return m;
else
if(Q[m+1] < x) {
p=m+1;
m=(p+u)/2;
}
else {
u=m-1;
m=(p+u)/2;
}
}
return *nr;
}
void P3(int V[],int n) {
int P[n+1],Q[n+1];
int i,poz,nr;
Q[0]=0; Q[1]=V[1]; P[1]=1; nr=1;
for(i=2;i<=n;i++) {
poz=pozitie(V[i],Q,&nr);
Q[poz]=V[i];
P[i]=poz;
}
afisare(nr,P,n,V);
}
int main() {
char *fintrare, *fiesire;
fintrare ="scmax.in";
fiesire ="scmax.out";
int n,V[1000];
FILE *f;
f=fopen(fintrare,"rt");
fscanf(f,"%i",&n);
int i;
for(i=1; i<=n; i++)
fscanf(f,"%i", &V[i]);
fclose(f);
g=fopen(fiesire,"wt");
P3(V,n);
fclose(g);
}