Cod sursa(job #2850890)
Utilizator | Data | 17 februarie 2022 18:15:05 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 2.28 kb |
#include <bits/stdc++.h>
using namespace std;
int n,i,t,x,st,dr,mij,v[100005],T;
int main(void){
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
fin >> n;
for(i=1;i<=n;i++)
{
fin >> v[i];
}
fin >> T;
for(i=1;i<=T;i++)
{
fin >> t >> x;
st = 1;
dr = n;
if(t == 0)
{
while(st <= dr)
{
mij = (st+dr)/2;
if(v[mij] == x)
{
st = mij+1;
} else if(v[mij] < x)
{
st = mij+1;
} else if(v[mij] > x)
{
dr = mij-1;
}
}
mij = (st+dr)/2;
if(v[mij] > x)
{
mij--;
}
if(v[mij] == x)
{
fout << mij << "\n";
}
}
if(t==1)
{
while(st <= dr)
{
mij = (st+dr)/2;
if(v[mij] == x)
{
st = mij+1;
} else if(v[mij] < x)
{
st = mij+1;
} else if(v[mij] > x)
{
dr = mij-1;
}
}
mij = (st+dr)/2;
if(v[mij] > x)
{
mij--;
}
if(v[mij] == x)
{
fout << mij << "\n";
}
if(v[mij] < x)
{
fout << mij << "\n";
}
}
if(t==2)
{
while(st <= dr)
{
mij = (st+dr)/2;
if(v[mij] == x)
{
dr = mij-1;
} else if(v[mij] < x)
{
st = mij+1;
} else if(v[mij] > x)
{
dr = mij-1;
}
}
mij = (st+dr)/2;
if(v[mij] < x)
{
mij++;
}
if(v[mij] >= x)
{
fout << mij << "\n";
}
}
}
}