Pagini recente » Cod sursa (job #2164778) | Cod sursa (job #1425358) | Cod sursa (job #900530) | Cod sursa (job #2739113) | Cod sursa (job #2462383)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
#define MAX_SIZE 100010
int n, m, i, j, c, val, rasp, in, sf, mid;
int v[MAX_SIZE];
int Find0(int val) {
in = 1;
sf = n;
mid = (in+sf)/2;
rasp = -1;
///cout << in << ' ' << mid << ' ' << sf << '\n';
while(in != sf) {
if(v[mid] == val) {
if(in != mid){
rasp = mid;
in = mid;
mid = (in+sf)/2;
} else {
sf = mid;
mid = (in+sf)/2;
}
} else if(v[mid] < val) {
if(in != mid) {
in = mid;
mid = (in+sf)/2;
} else {
sf = mid;
mid = (in+sf)/2;
}
} else if(v[mid] > val) {
sf = mid;
mid = (in+sf)/2;
}
///cout << in << ' ' << mid << ' ' << sf << '\n';
}
return rasp;
}
int Find1(int val) {
in = 1;
sf = n;
mid = (in+sf)/2;
rasp = -1;
///cout << in << ' ' << mid << ' ' << sf << '\n';
while(in != sf) {
if(v[mid] <= val) {
rasp = mid;
if(in != mid){
in = mid;
mid = (in+sf)/2;
} else {
sf = mid;
mid = (in+sf)/2;
}
} else if(v[mid] > val) {
sf = mid;
mid = (in+sf)/2;
}
///cout << in << ' ' << mid << ' ' << sf << '\n';
}
return rasp;
}
int Find2(int val) {
in = 1;
sf = n;
mid = (in+sf)/2;
rasp = -1;
///cout << in << ' ' << mid << ' ' << sf << '\n';
while(in != sf) {
if(v[mid] >= val) {
rasp = mid;
sf = mid;
mid = (in+sf)/2;
} else if(v[mid] < val) {
if(in != mid) {
in = mid;
mid = (in+sf)/2;
} else {
in = mid+1;
mid = (in+sf)/2;
if(v[mid] >= val)
rasp = mid;
}
}
///cout << in << ' ' << mid << ' ' << sf << '\n';
}
return rasp;
}
int main()
{
f >> n;
for(i = 1; i <= n; i++) {
f >> v[i];
///cout << v[i] << ' ';
}
///cout << '\n';
f >> m;
for(i = 1; i <= m; i++) {
f >> c >> val;
if(c == 0)
rasp = Find0(val);
else if(c == 1)
rasp = Find1(val);
else if(c == 2)
rasp = Find2(val);
g << rasp << '\n';
///cout << '\n';
}
return 0;
}