Pagini recente » Cod sursa (job #348389) | Cod sursa (job #1969734) | Cod sursa (job #34102) | Cod sursa (job #39922) | Cod sursa (job #814991)
Cod sursa(job #814991)
#include <stdio.h>
int oceans[100001],ind_ultim_ssc[100001],rec[100001],sol[100001];
int caut_bin(int start,int end,int cur)
{
int m=(start+end)/2;
if(start>end) return 0;
if(oceans[ind_ultim_ssc[m]]<cur)
{
if(ind_ultim_ssc[m+1]==-1)
return m;
else if(oceans[ind_ultim_ssc[m+1]]>cur)
return m;
else caut_bin(m+1,end,cur);
}
else if(oceans[ind_ultim_ssc[m]]==cur)
caut_bin(m+1,end,cur);
else return caut_bin(start,m-1,cur);
}
int main(int argc, char * arg[])
{
FILE *in=fopen("scmax.in","r");
FILE *out=fopen("scmax.out","w");
int n,i,j,smax;
fscanf(in,"%d",&n);
for(i=0;i<n;i++)
{
fscanf(in,"%d",&oceans[i]);
rec[i]=-1;
ind_ultim_ssc[i]=-1;
}
ind_ultim_ssc[n]=-1;
rec[n]=-1;
smax=1;
ind_ultim_ssc[1]=0;
rec[0]=-1;
for(i=1;i<n;i++)
{
j=caut_bin(0,smax,oceans[i]);
if(j==smax || oceans[ind_ultim_ssc[j+1]]>oceans[i])
{
ind_ultim_ssc[j+1]=i;
smax=smax>(j+1)?smax:(j+1);
}
}
sol[0]=j;
fprintf(out,"%d\n",smax);
fclose(in);
fclose(out);
return 0;
}