Tuesday, January 7, 2020

Sonam Bewafa asks questions

#include <string>
#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <numeric>
#include <stack>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <ctime>
#include <climits>
#include <stdlib.h>
#include <time.h>
#include <cassert>
#include <map>
#include <unordered_set>
#include <bitset>
#include <list>
#include <climits>
#include <unordered_map>

using namespace std;


int main(){
    
    int t;
    
    cin >> t;
    
    while(t--){
      
        int n,q;
        cin >> n >> q;
        vector<pair <long long,long long>> arr(n);
        int i;
        for(i=0;i<n;i++){
            long long a,b;
            cin >> a >> b;
            arr[i]={a,b};
        }
        vector <long long> brr(n);
        for(i=0;i<n;i++){
            if(i==0){
                brr[i]=arr[i].first-1;
            }
            else{
                brr[i]=arr[i].first-arr[i-1].second-1+brr[i-1];
            }
        }
        for(i=0;i<n;i++){
            arr[i].first=arr[i].first-brr[i];
            arr[i].second=arr[i].second-brr[i];
        }
        arr[n-1].second=pow(10, 18);
        while (q--) {
            long long x;
            cin >> x;
            int l=0;
            int h=n-1;
            int ans=0;
            while (l<=h) {
                int mid=(l+h)/2;
                if(x>=arr[mid].first && x<=arr[mid].second){
                    ans=mid;
                    break;
                }
                else if(x<arr[mid].first){
                    h=mid-1;
                }
                else{
                    l=mid+1;
                }
            }
           
            cout << x+brr[ans] << " " ;
            
            
        }
        cout << endl;
        
        
    }
    return 0;
    //sujan
}

No comments:

Post a Comment