Pagini recente » Cod sursa (job #3219819) | Cod sursa (job #687323) | Cod sursa (job #1847753) | Cod sursa (job #1919923) | Cod sursa (job #2559109)
#include <iostream>
#include <fstream>
#define N 100010
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int a[N], n, m;
int Cautare(int st, int dr, int x)
{
int m;
while(st <= dr)
{
m=st + (dr-st)/2;
if(a[m] == x) return m;
else if(a[m] < x) st=m+1;
else dr=m-1;
}
return -1;
}
int Cerinta1(int st, int dr, int x)
{
int m;
while(st <= dr)
{
m=st + (dr-st)/2;
if(a[m] <= x) return m;
else dr=m-1;
}
}
int Cerinta2(int st, int dr, int x)
{
int m;
while(st <= dr)
{
m=st + (dr-st)/2;
if(a[m] >= x) return m;
else st=m+1;
}
}
int main()
{
int i, j, q, x, g;
fin >> n;
for(i = 1; i <= n; i++)
fin >> a[i];
fin >> m;
while(fin >> q >> x)
{
g=Cautare(1, n, x);
if(q == 0)
{
if(g == -1) fout << -1 << "\n";
else
{
while(a[g+1] == x) g++;
fout << g << "\n";
}
}
if(q == 1)
{
if(g != -1)
{
while(a[g+1] == x) g++;
fout << g << "\n";
}
else fout << Cerinta1(1, n, x) << "\n";
}
else if(q == 2)
{
if(g != -1)
{
while(a[g-1] == x) g--;
fout << g << "\n";
}
else fout << Cerinta2(1, n, x) << "\n";
}
}
return 0;
}