Advertisement
fireLUFFY

RMQ

Dec 22nd, 2021
1,090
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.92 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. // #define int long long
  5. #define inf 2e18
  6. int MOD=1000000007;//998244353;
  7. const int nn=1000050;
  8. bool prime[nn];    //array to store precalculated primes till 10^6
  9. void cal_primes(){memset(prime,true,sizeof(prime)); for(int i=2;i<=sqrt(nn);++i){ if(prime[i]==true){ for(int j=i*i;j<=nn;j+=i){prime[j]=false;}}}}
  10.  
  11. int m[200005][19];
  12. int logg[200005];
  13. int min_in_range(int l,int r)
  14. {
  15.     int length=(r-l+1),k;
  16.     k=logg[length];
  17.     return min(m[l][k],m[r-(1<<k)+1][k]);
  18. }
  19.  
  20. void solve(int t)
  21. {
  22.     int testcases=t;
  23.     logg[1]=0;
  24.     for(int i=2;i<200005;i++){
  25.         logg[i]=logg[i/2]+1;
  26.     }
  27.    
  28.     while(t--)
  29.     {
  30.         //cout<<"Case #"<<(testcases-t)<<": "<<endl;
  31.         int n,q;cin>>n>>q;
  32.         vector<int> v(n);
  33.         for(int i=0;i<n;i++){
  34.             cin>>v[i];
  35.             m[i][0]=v[i];
  36.         }
  37.  
  38.         for(int j=1;j<19;j++){
  39.             for(int i=0;(i+(1<<j)-1)<n;i++){
  40.                 m[i][j]=min(m[i][j-1],m[i+(1<<(j-1))][j-1]);
  41.             }
  42.         }
  43.  
  44.         // for(int i=0;i<n;i++){
  45.         //     for(int j=0;j<17;j++)
  46.         //         cerr<<m[i][j]<<" ";
  47.         //     cerr<<endl;
  48.         // }
  49.  
  50.         int l,r;
  51.  
  52.         for(int i=0;i<q;i++){
  53.             cin>>l>>r;
  54.             // cerr<<min_in_range(l-1,r-1)<<endl;
  55.             cout<<min_in_range(l-1,r-1)<<endl;
  56.         }
  57.     }
  58. }
  59.  
  60. main()
  61. {
  62.     auto start=chrono::system_clock::now();
  63.     {
  64.         #ifndef ONLINE_JUDGE
  65.             freopen("input.txt","r",stdin);
  66.             freopen("output.txt","w",stdout);
  67.             freopen("error.txt","w",stderr);
  68.         #endif    
  69.         ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  70.         int t=1;
  71.         // cin>>t;
  72.         solve(t);
  73.     }
  74.     auto end=chrono::system_clock::now();
  75.     chrono::duration<double> elapsed=end-start;
  76. //    cout<<endl<<"Time taken: "<<elapsed.count()<<" sec";
  77.     return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement