Pagini recente » Cod sursa (job #1383173) | Cod sursa (job #2482137) | Cod sursa (job #1168199) | Cod sursa (job #2206238) | Cod sursa (job #2838377)
#include <cstdio>
using namespace std ;
FILE *fin , *fout ;
#define NMAX 100000
int v[NMAX + 5] ;
int n ;
int task0 (int nr)
{
int left = 1 , right = n , mid ;
bool ok = false ;
while(left <= right)
{
mid = (left + right) / 2 ;
if(v[mid] == nr)
{
ok = true ;
int j = mid ;
while(j <= n and v[j] == v[mid])
j++;
j--;
return j ;
}
else if(v[mid] > nr)
right = mid - 1 ;
else if(v[mid] < nr)
left = mid + 1 ;
}
if(ok == false)
return -1 ;
}
int task1 (int nr)
{
int left = 1 , right = n , mid ;
while(left <= right)
{
mid = (left + right) / 2 ;
if(v[mid] <= nr and v[mid + 1] > nr)
return mid ;
else if(v[mid] <= nr)
left = mid + 1 ;
else if(v[mid] > nr)
right = mid - 1 ;
}
}
int task2 (int nr)
{
int left = 1 , right = n , mid ;
while(left <= right)
{
mid = (left + right) / 2 ;
if(v[mid] >= nr and v[mid - 1] < nr)
return mid ;
else if(v[mid] < nr)
left = mid + 1 ;
else if(v[mid]>= nr)
right = mid - 1 ;
}
}
int main()
{
fin = fopen("cautbin.in" , "r") ;
fout = fopen("cautbin.out" , "w") ;
fscanf(fin , "%d" , &n) ;
for(int i = 1 ; i <= n ; i++)
fscanf(fin , "%d" , &v[i]) ;
int m ;
fscanf(fin , "%d" , &m) ;
for(int i = 1 ; i <= m ; i++)
{
int task , nr ;
fscanf(fin , "%d%d" , &task , &nr) ;
if(task == 0)
fprintf(fout , "%d\n" , task0(nr)) ;
else if(task == 1)
fprintf(fout , "%d\n" , task1(nr)) ;
else if(task == 2)
fprintf(fout , "%d\n" , task2(nr)) ;
}
fclose(fin) ;
fclose(fout) ;
return 0 ;
}