Pagini recente » Cod sursa (job #3154702) | Cod sursa (job #1032610) | Cod sursa (job #638649) | Cod sursa (job #564733) | Cod sursa (job #1119215)
#include <fstream>
#define NMax 100001
using namespace std;
int N, M, v[NMax];
int opcode_0(int x)
{
int left, right, middle;
left = 1;
right = N;
middle = (left + right) / 2;
while(v[middle] != x && left < right)
{
if(x < v[middle])
right = middle;
else
left = middle;
middle = (left + right) / 2;
}
if(v[middle] == x)
{
while(v[middle + 1] == x)
++middle;
return middle;
}
return -1;
}
int opcode_1(int x)
{
int left, right, middle;
left = 1;
right = N;
middle = (left + right) / 2;
while(v[middle] != x && left < right)
{
if(x < v[middle])
right = middle;
else
left = middle;
middle = (left + right) / 2;
}
while(v[middle] <= x)
++middle;
return middle - 1;
}
int opcode_2(int x)
{
int left, right, middle;
left = 1;
right = N;
middle = (left + right) / 2;
while(v[middle] != x && left < right)
{
if(x < v[middle])
right = middle;
else
left = middle;
middle = (left + right) / 2;
}
while(v[middle] >= x)
--middle;
return middle + 1;
}
int main()
{
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int i, val, opcode;
fin >> N;
for(i=1 ; i<=N ; ++i)
fin >> v[i];
fin >> M;
for(i=1 ; i<=M ; ++i)
{
fin >> opcode >> val;
switch(opcode)
{
case 0: fout << opcode_0(val) << '\n'; break;
case 1: fout << opcode_1(val) << '\n'; break;
case 2: fout << opcode_2(val) << '\n'; break;
}
}
fin.close();
fout.close();
return 0;
}