Pagini recente » Cod sursa (job #2866748) | Cod sursa (job #1164742) | Cod sursa (job #1065165) | Cod sursa (job #1517860) | Cod sursa (job #2462384)
#include <fstream>
using namespace std;
int v[100010];
int n;
int st, dr, mid, t, i, tip, x;
int main () {
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>>tip>>x;
switch (tip) {
case 0:
///
/// a a a a a x x x x x b b b b b
/// 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
st = 1;
dr = n;
while (st<=dr) {
int mid = (st + dr)/2;
if (v[mid] <= x)
st = mid+1;
else
dr = mid-1;
}
if (dr > 0 && v[dr] == x)
fout<<dr<<"\n";
else
fout<<"-1\n";
break;
case 1:
st = 1;
dr = n;
while (st<=dr) {
int mid = (st + dr)/2;
if (v[mid] <= x)
st = mid+1;
else
dr = mid-1;
}
fout<<dr<<"\n";
break;
case 2:
/// a a a a a x x x x x b b b b
/// trebuie primul x si daca nu e x, primul b
/// 0 0 0 0 0 1 1 1 1 1 1 1 1 1
st = 1; dr = n;
while (st <= dr) {
int mid = (st + dr)/2;
if (v[mid] < x)
st = mid+1;
else
dr = mid-1;
}
fout << st <<"\n";
break;
}
}
return 0;
}