Pagini recente » Cod sursa (job #1091677) | Cod sursa (job #477919) | Cod sursa (job #1095336) | Cod sursa (job #588451) | Cod sursa (job #2537996)
#include <bits/stdc++.h>
using namespace std;
long long n, v[100005], m, c, i, x, poz, st;
void binarysearch(long long x, long long & poz, long long & st)
{
st = 1;
long long dr = n;
while(st <= dr)
{
int mij = (st + dr) / 2;
if(v[mij] == x)poz = mij, st = dr + 1;
else if(v[mij] > x)dr = mij - 1;
else st = mij + 1;
}
}
int main()
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f >> n;
for(i = 1;i <= n;i++)
f >> v[i];
f >> m;
for(i = 1;i <= m;i++)
{
f >> c >> x;
poz = -1;
binarysearch(x, poz, st);
if(c == 0)
{
if(poz == -1)g << "-1" << "\n";
else
{
while(v[poz + 1] == v[poz])poz++;
g << poz << "\n";
}
}
if(c == 1)
{
if(poz != -1)
{
while(v[poz + 1] == v[poz])poz++;
g << poz << "\n";
}
else
{
while(v[st] > x)st--;
while(v[st] <= x)st++;
g << st - 1 << "\n";
}
}
if(c == 2)
{
if(poz != -1)
{
while(v[poz - 1] == v[poz])poz--;
g << poz << "\n";
}
else
{
while(v[st] < x)st++;
while(v[st] > x)st--;
g << st + 1 << "\n";
}
}
}
return 0;
}