Pagini recente » Cod sursa (job #2290095) | Cod sursa (job #1515612) | Cod sursa (job #1443539) | Cod sursa (job #2105334) | Cod sursa (job #1796934)
#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];
int m[DIMMAX][2];
void citire()
{
ifstream f("cautbin.in");
f>>N;
FOR(i, 1, N)
{
f>>a[i];
}
f>>M;
FOR(i, 1, M)
{
f>>m[i][0]>>m[i][1];
}
f.close();
}
ofstream g("cautbin.out");
void afisare(int x)
{
g<<x<<'\n';
}
int binary_search(int s, int d, int val)
{
if(s<=d)
{
int m=(s+d)/2;
if(val<a[m])binary_search(s,m-1,val);
else
if(val>a[m])binary_search(m+1,d,val);
else
return m;
}
else
return -1;
}
int main()
{
citire();
FOR(i,1,M)
{
if(m[i][0]==0)
{
int aux=binary_search(1,N,m[i][1]);
if(aux==-1)
afisare(-1);
else
{
int j=aux;
while(a[++j]==a[aux]);
afisare(j-1);
}
}
else
if(m[i][0]==1)
{
int aux=binary_search(1,N,m[i][1]);
int j=1;
while(a[aux]==a[aux+j])
{
j++;
}
afisare(aux+j-1);
}
else
{
int aux=binary_search(1,N,m[i][1]);
int j=1;
while(a[aux]==a[aux-j])
{
j++;
}
afisare(aux-j+1);
}
}
g.close();
return 0;
}