Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <math.h>
- #include <string.h>
- #pragma warning(disable:4996)
- #define MAX(a,b) (((a)>(b))?(a):(b))
- #define MIN(a,b) (((a)<(b))?(a):(b))
- typedef long long LL;
- typedef unsigned long long ULL;
- int compare(const void *p,const void *q){
- int a = *(int *)p,b = *(int *)q;
- if(a < b)return -1;
- else if(a > b)return 1;
- else return 0;
- }
- void *lowerbound(void *base,void *key,size_t count,size_t itemsize,int(*compare)(const void *,const void *)){
- //assert(base && compare);
- size_t lo = 0,hi = count - 1,mid = 0;
- if(compare(key,(char *)base + hi * itemsize) > 0){
- return (char *)base + count * itemsize;
- }
- char *pmid = 0;
- while(lo < hi){
- mid = (lo + hi) >> 1;
- pmid = ((char *)base) + mid * itemsize;
- if(compare(pmid,key) < 0){
- lo = mid + 1;
- }
- else{
- hi = mid;
- }
- }
- return (char *)base + lo * itemsize;
- }
- void *upperbound(void *base,void *key,size_t count,size_t itemsize,int(*compare)(const void *,const void *)){
- //assert(base && compare);
- size_t lo = 0,hi = count - 1,mid;
- if(compare(key,(char *)base + hi * itemsize) >= 0){
- return (char *)base + count * itemsize;
- }
- char *pmid;
- while(lo < hi){
- mid = (lo + hi) >> 1;
- pmid = ((char *)base) + mid * itemsize;
- if(compare(pmid,key) <= 0){
- lo = mid + 1;
- }
- else{
- hi = mid;
- }
- }
- return (char *)base + lo * itemsize;
- }
- int a[1919810] = {0};
- int main(){
- int n,q,i,m;
- scanf("%d",&n);
- for(i = 0;i < n;i++){
- scanf("%d",a + i);
- }
- scanf("%d",&q);
- while(q--){
- scanf("%d",&m);
- int *pos = (int *)lowerbound(a,&m,n,sizeof(int),compare);
- if(*pos == m){
- printf("Yes %d\n",(int)(pos - a) + 1);
- }
- else{
- puts("No");
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement