P2249 【深基13.例1】查找
#include<iostream>
#include<cstdio>
#include<stdio.h>
using namespace std ;
int n ,m ;
int num[1000005] ;
int main(){
scanf("%d%d" , &n , &m) ;
for(int i = 1;i <=n;++i){
scanf("%d" , &num[i]) ;
}
for(int i = 1;i <= m;++i){
int ask ;
scanf("%d" , &ask) ;
int lef = 1 ;
int rig = n ;
while(lef <= rig){
int mid = (lef + rig) / 2 ;
if(num[mid] < ask)
lef = mid + 1 ;
else
rig = mid - 1 ;
}
if(num[lef] == ask)
printf("%d " , lef) ;
else
printf("-1 ") ;
}
return 0 ;
}
P2678 [NOIP2015 提高组] 跳石头
#include<iostream>
#include<cstdio>
#include<stdio.h>
using namespace std ;
int l ,n ,m ;
int a[50004] ;
int lef ,rig ;
int mid ;
int ans ;
bool judge(int x){
int tot = 0 ;
int now = 0 ;
int next = 0 ;
while(next < n + 1){
next++ ;
if(a[next] - a[now] >= x){
now = next ;
}else{
tot++ ;
}
}
return tot <= m ;
}
int main(){
scanf("%d%d%d" , &l , &n , &m) ;
for(int i = 1;i <= n;++i)
scanf("%d" , &a[i]) ;
a[n+1] = l ;
lef = 0 ;
rig = l ;
while (lef <= rig) {
mid = (lef + rig) / 2 ;
if(judge(mid)){
ans = mid ;
lef = mid + 1 ;
}else{
rig = mid - 1 ;
}
}
printf("%d" , ans) ;
return 0 ;
}