Pagini recente » Cod sursa (job #1683929) | Cod sursa (job #1948564) | Cod sursa (job #1346158) | Cod sursa (job #2235397) | Cod sursa (job #1796972)
#include <iostream>
#include <fstream>
#include <math.h>
#define DIMMAX 100005
#define ll long long
#define FOR(i, a, b) for(int i = a; i <= b; i++)
using namespace std;
ll N, M;
int a[DIMMAX];
ifstream f("cautbin.in");
void citire()
{
f>>N;
FOR(i, 1, N)
{
f>>a[i];
}
f>>M;
}
ofstream g("cautbin.out");
void afisare(int x)
{
g<<x<<'\n';
}
int binary_search(int s, int d, int val)
{
int mij;
if(s<=d)
{
mij=(s+d)/2;
if(val<a[mij])binary_search(s,mij-1,val);
else
if(val>a[mij])binary_search(mij+1,d,val);
else
return mij;
}
else
return -(s+d)/2;
}
int main()
{
citire();
FOR(i,1,M)
{
int tip,val;
f>>tip>>val;
if(tip==0)
{
int aux=binary_search(1,N,val);
if(aux<0)
afisare(-1);
else
{
int j=aux;
while(a[++j]==a[aux]);
afisare(j-1);
}
}
else
if(tip==1)
{
int aux=binary_search(1,N,val);
if(aux<0)
{
afisare(-aux);
}
else
{
int j=1;
while(a[aux]==a[aux+j])
{
j++;
}
afisare(aux+j-1);
}
}
else
{
int aux=binary_search(1,N,val);
if(aux<0)
{
afisare(-aux+1);
}
else
{
int j=1;
while(a[aux]==a[aux-j])
{
j++;
}
afisare(aux-j+1);
}
}
}
g.close();
f.close();
return 0;
}