Pagini recente » Cod sursa (job #2103525) | Cod sursa (job #46964) | Cod sursa (job #2279784) | Istoria paginii runda/feofjeofnqefe/clasament | Cod sursa (job #2015384)
#include <bits/stdc++.h>
using namespace std;
FILE *F=fopen("cautbin.in", "r"), *G=fopen("cautbin.out", "w");
int n, v[100005], x, q, m;
int bs1(int x)
{
int st = 1, dr = n, mij, ok = 0;
while(st <= dr)
{
mij = (st+dr)>>1;
if(v[mij] <= x) st = mij+1, ok = 1;
else dr = mij - 1;
}
if(!ok) return -1;
return st-1;
}
int bs2(int x)
{
int st = 1, dr = n, mij;
while(st <= dr)
{
mij = (st+dr)>>1;
if(v[mij] <= x) st = mij+1;
else dr = mij - 1;
}
return st-1;
}
int bs3(int x)
{
int st = 1, dr = n, mij;
while(st <= dr)
{
mij = (st+dr)>>1;
if(v[mij] < x) st = mij+1;
else dr = mij - 1;
}
return dr+1;
}
int main()
{
fscanf(F, "%d ", &n);
for(int i = 1; i <= n; ++ i) fscanf(F, "%d ", &v[i]);
fscanf(F, "%d ", &m);
while(m--)
{
fscanf(F, "%d %d ", &q, &x);
if(!q) fprintf(G, "%d\n", bs1(x));
else if(q == 1) fprintf(G, "%d\n", bs2(x));
else if(q == 2) fprintf(G, "%d\n", bs3(x));
}
return 0;
}