Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #include <ctype.h>
- #include <time.h>
- #pragma warning(disable:4996 6031)
- void *lowerbound(void *key, void *base, size_t count, size_t itemsize, int(*compare)(const void *, const void *)){
- 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 *key, void *base, size_t count, size_t itemsize, int(*compare)(const void *, const void *)){
- size_t lo = 0, hi = count - 1, mid;
- if(compare(key, (char *)base + hi * itemsize) >= 0){
- return (char *)base + count * itemsize;
- }
- char *pmid = 0;
- while(lo < hi){
- mid = (lo + hi) >> 1;
- char *pmid = ((char *)base) + mid * itemsize;
- if(compare(pmid, key) <= 0){
- lo = mid + 1;
- }
- else{
- hi = mid;
- }
- }
- return (char *)base + lo * itemsize;
- }
- int arr[1919810] = { 0 };
- int compare_s32(const void *p, const void *q){
- int x = *((int *)p), y = *((int *)q);
- if(x < y){
- return -1;
- }
- else if(x > y){
- return 1;
- }
- else{
- return 0;
- }
- }
- int main(){
- int n, t, i, k, *lb, *ub;
- scanf("%d%d", &n, &t);
- for(i = 0; i < n; i++){
- scanf("%d", arr + i);
- }
- while(t--){
- scanf("%d", &k);
- lb = lowerbound(&k, arr, n, sizeof(int), compare_s32);
- ub = upperbound(&k, arr, n, sizeof(int), compare_s32);
- if(*lb == k && (lb < arr + n)){
- printf("%d %d\n", lb - arr + 1, ub - lb);
- }
- else{
- puts("-1");
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement