Pagini recente » Cod sursa (job #3324748) | Atasamentele paginii Profil Luizarachieru | Cod sursa (job #3332455) | Borderou de evaluare (job #1219695) | Cod sursa (job #3353418)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
#define nmax 100005
int bin[nmax];
int n, tasklist;
int task1(int x){
int pos;
int lefty = 0, righty = n - 1;
while(lefty <= righty ){
int mid = (lefty + righty) / 2;
if(bin[mid] >= x){
pos = mid;
}
if(bin[mid] <= x){
lefty++;
}
else if(bin[mid] >= x){
righty++;
}
}
pos++;
return pos;
}
int task2(int x){
int pos = 0;
int lefty = 0, righty = n - 1;
while(lefty <= righty && bin[pos] <= x){
int mid = (lefty + righty) / 2;
if(bin[mid] == x){
pos = mid;
}
if(bin[mid] <= x){
lefty++;
}
else if(bin[mid] >= x){
righty++;
}
}
pos++;
return pos;
}
int task3(int x){
int pos;
int lefty = 0, righty = n - 1;
while(lefty <= righty ){
int mid = (lefty + righty) / 2;
if(bin[mid] == x){
pos = mid;
}
if(bin[mid] <= x){
lefty++;
}
else if(bin[mid] >= x){
righty++;
}
if(bin[pos] >= x){
pos++;
return pos;
}
}
}
int main()
{
fin >> n;
for(int i = 0; i < n; i++){
fin >> bin[i];
}
fin >> tasklist;
while(tasklist--){
int tasknum, x;
fin >> tasknum >> x;
if(tasknum == 0)
fout << task1(x) << '\n';
else if(tasknum == 1)
fout << task2(x) << '\n';
else if(tasknum == 2)
fout << task3(x);
}
return 0;
}