Pagini recente » Cod sursa (job #1111635) | Cod sursa (job #862030) | Cod sursa (job #1818541) | Cod sursa (job #2237319) | Cod sursa (job #1137353)
#include <fstream>
#include <stdio.h>
using namespace std;
int n,i,m,j, st, dr, mij;
unsigned int v[200010];
int opt, val;
FILE *fin;
FILE *fout;
void opt0(int val)
{
st = 0;
dr = n-1;
while (st<=dr)
{
mij = st + (dr-st)/2;
if (v[mij] <= val)
st = mij+1;
else
dr = mij-1;
}
mij = st + (dr-st)/2;
if (v[mij] > val)
mij--;
if (v[mij] == val)
fprintf(fout, "%d\n", mij+1);
else
fprintf(fout, "%d\n", -1);
}
void opt1(int val)
{
st = 0;
dr = n-1;
while (st<=dr)
{
mij = st + (dr-st)/2;
if (v[mij] <= val)
st = mij+1;
else
dr = mij-1;
}
mij = st + (dr-st)/2;
if (v[mij] > val && v[mij-1] <= val)
mij--;
fprintf(fout, "%d\n", mij+1);
}
void opt2(int val)
{
st = 0;
dr = n-1;
while (st<=dr)
{
mij = st + (dr-st)/2;
if (v[mij] < val)
st = mij+1;
else
dr = mij-1;
}
mij = st + (dr-st)/2;
if (v[mij] < mij)
mij;
fprintf(fout, "%d\n", mij+1);
}
int main()
{
fin = fopen("cautbin.in","r");
fout = fopen("cautbin.out", "w");
fscanf(fin, "%d", &n);
for (i=0;i<n;i++)
fscanf(fin,"%u ", &v[i]);
fscanf(fin, "%d", &m);
for (j=0;j<m;j++)
{
fscanf(fin, "%d %d", &opt, &val);
switch(opt)
{
case 0: opt0(val); break;
case 1: opt1(val); break;
case 2: opt2(val); break;
default : break;
}
}
fclose(fin);
fclose(fout);
return 0;
}