Pagini recente » Cod sursa (job #1817556) | Cod sursa (job #644541) | Cod sursa (job #903370) | Cod sursa (job #508095) | Cod sursa (job #804453)
Cod sursa(job #804453)
#include<stdio.h>
FILE *f = fopen("cautbin.in","r");
FILE *g = fopen("cautbin.out","w");
#define MaxN 100100
int N,valGlobal,M;
int A[MaxN];
void citire(void)
{
fscanf(f,"%d ",&N);
for(int i=1;i<=N;i++)
fscanf(f,"%d ",&A[i]);
}
inline int CautBinCaz1(int a)
{
int poz = 1;
for(int val = valGlobal;val;val >>= 1)
if(poz+val <= N && A[poz+val] <= a)
poz += val;
return poz;
}
inline int CautBinCaz2(int a)
{
int poz = 0;
for(int val = valGlobal;val;val >>= 1)
if(poz+val <= N && A[poz+val] < a)
poz += val;
return ++poz;
}
int main()
{
int op,nr,poz;
citire();
for(valGlobal = 1;valGlobal <= N;valGlobal <<= 1);
fscanf(f,"%d",&M);
for(int i=1;i<=M;i++)
{
fscanf(f,"%d %d\n",&op,&nr);
switch(op)
{
case 0 : poz = CautBinCaz1(nr);
fprintf(g,"%d\n",A[poz] == nr ? poz : -1);
break;
case 1 : fprintf(g,"%d\n",CautBinCaz1(nr));
break;
default : fprintf(g,"%d\n",CautBinCaz2(nr));
}
}
}