Pagini recente » Cod sursa (job #1283873) | Cod sursa (job #2177879) | Cod sursa (job #2330205) | Cod sursa (job #2232945) | Cod sursa (job #854963)
Cod sursa(job #854963)
#include <stdio.h>
using namespace std;
FILE*g;
int v[100001];
int n,m;
void do_this(int nr)
{
int st=1,dr=n;
int mid;
mid=st+(dr-st)/2;
while(st < dr)
{
if(v[mid]<=nr)st=mid+1;
else dr=mid-1;
mid=st+(dr-st)/2;
}
if(v[mid]>nr)mid--;
if(v[mid]!=nr)fprintf(g,"-1\n");
else fprintf(g,"%d\n",mid);
}
void do_that(int nr)
{
int st=1,dr=n;
int mid;
mid=st+(dr-st)/2;
while(st<dr)
{
if(v[mid]<=nr) st=mid+1;
else dr=mid-1;
mid=st+(dr-st)/2;
}
if(v[mid]>nr)mid--;
fprintf(g,"%d\n",mid);
}
void do_smth(int nr)
{
int st=1,dr=n;
int mid;
mid=st+(dr-st)/2;
while(st<dr)
{
if(v[mid]<nr) st=mid+1;
else dr=mid-1;
mid=st+(dr-st)/2;
}
if(v[mid]<nr) mid++;
fprintf(g,"%d\n",mid);
}
int main()
{
FILE*f;
f=fopen("cautbin.in","r");
g=fopen("cautbin.out","w");
fscanf(f,"%d",&n);
for(int i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
fscanf(f,"%d",&m);
int op,x;
for(int i=1;i<=m;i++)
{
fscanf(f,"%d",&op);
fscanf(f,"%d",&x);
switch(op)
{
case 0: {do_this(x); break;}
case 1: {do_that(x); break;}
case 2: {do_smth(x); break;}
}
}
return 0;
}