Pagini recente » Cod sursa (job #31489) | Cod sursa (job #1006728) | Cod sursa (job #880050) | Cod sursa (job #93029) | Cod sursa (job #994736)
Cod sursa(job #994736)
#include<fstream>
#define dmax 100003
#define N 1<<17
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n, m;
int array[dmax];
int binary_search(int val)
{
int i, step;
for (step = 1; step < n+1; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step < n+1 && array[i + step] <= val)
i += step;
return i;
}
/*int binary_search(int nr)
{
int lo = 1;
int hi = n;
int mid;
while(lo <= hi)
{
mid = lo + (hi-lo)/2;
if(array[mid] == nr) return mid;
else if(array[mid] < nr) lo = mid+1;
else if(array[mid] > nr) hi = mid-1;
} return mid;
}*/
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
fin>>array[i];
fin>>m;
for(int i=1; i<=m; i++)
{
int op,nr;
fin>>op>>nr;
int index = binary_search(nr);
if(op == 0)
{
while(array[index+1] == nr && index < n) index++;
if(array[index] == nr)
fout<<index<<'\n';
else fout<<"-1\n";
}
else if(op == 1)
{
while(array[index+1] == nr && index < n) index++;
while(array[index] > nr && index > 1) index--;
fout<<index<<'\n';
}
else if(op == 2)
{
while(array[index-1] == nr && index > 1) index--;
while(array[index] < nr && index < n) index++;
fout<<index<<'\n';
}
}
}