Pagini recente » Cod sursa (job #2704255) | Cod sursa (job #2319146) | Cod sursa (job #2896822) | Cod sursa (job #884950) | Cod sursa (job #955116)
Cod sursa(job #955116)
#include<iostream>
#include<fstream>
using namespace std;
ifstream f ("cautbin.in");
ofstream g("cautbin.out");
int v[100010];
int task0 (int p, int u, int key) {
int m;
while (p<=u) { m=(p+u) / 2;
if (v[m]<=key)
p=m+1;
else
u=m-1;
}
m = (p+u) / 2;
if (v[m]>key)m --;
if (v[m]==key)
return m;
return -1;
}
int task1 (int p, int n, int key) {
int m, u=n;
while (p < u){
m = (p + u) / 2;
if (v[m] <= key)
p=m + 1;
else
u = m;
}
m = (p + u) / 2;
if (v[m] > key)
-- m;
return m;
}
int task2 (int p, int u, int key) {
int m;
while (p < u) {
m = (p + u) / 2;
if (v[m] < key)
p=m + 1;
else
u=m;
}
m = (p + u) / 2;
if (v[m] < key)
++ m;
return m;
}
int main () {
int i, n, m, tip, val;
f>>n;
for (i=1;i<=n;++i)
f>>v[i];
f>>m;
while (m --){
f>>tip>>val;
if (tip==0)
g<<task0(1, n, val)<<"\n";
if (tip==1)
g<<task1(1,n,val)<<"\n";
if (tip==2)
g<<task2(1,n,val)<<"\n";
}
return 0;
}