Advertisement
Zeinab_Hamdy

Untitled

Jul 10th, 2024
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.50 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define nl "\n"
  4. #define fi first
  5. #define se second
  6. #define pb push_back
  7. #define ll long long
  8. #define RV return void
  9. #define sz(x) int(x.size())
  10. #define all(v) v.begin(), v.end()
  11. #define rall(v) v.rbegin(), v.rend()
  12. #define fixed(n) fixed << setprecision(n)
  13. #define cin(v) for(auto&x:v) cin >> x;
  14. #define cout(v) for(auto&x:v) cout << x << " ";
  15. void files(){
  16.     #ifndef ONLINE_JUDGE
  17.        freopen("input.txt", "r", stdin);
  18.        freopen("output.txt", "w", stdout);
  19.     #endif
  20. }
  21.  
  22.  
  23.  
  24. const ll mod = 1e9 + 7;
  25. ll up(ll a , ll b ){
  26.     return (( a % mod ) * ( b % mod) ) %mod;
  27. }
  28.  
  29. ll Binex(ll a , ll b ){
  30.     ll ret=1;
  31.     while(b){
  32.         if(b & 1 ) ret = up( ret, a);
  33.         a= up(a , a );
  34.         b>>=1;
  35.     }
  36.     return ret;
  37. }
  38.  
  39.  
  40. void solve(){
  41.  
  42.     int n , q , l ,  r;
  43.     string s ;
  44.  
  45.     cin >> n >> q >> s;
  46.  
  47.     vector < ll > pref(n) , suff(n);
  48.     for(int i =0 ; i < n ; i++){
  49.         pref[i] = (s[i] - '0');
  50.         if(i){
  51.             pref[i] = pref[i-1] * 10 + pref[i];
  52.             pref[i] %= mod;
  53.         }
  54.         // cout << pref[i] << nl;
  55.     }
  56.  
  57.     string t= s;
  58.     reverse(all(t));
  59.     for(int i = n-1 ; i >=0 ; i--){
  60.         suff[i] = (t[i] - '0');
  61.         if(i != n-1){
  62.             suff[i] = suff[i] *Binex(10 , n-i-1) + suff[i+1];
  63.             suff[i] %= mod;
  64.         }
  65.         // cout << suff[i] << nl;
  66.     }
  67.  
  68.     while(q--){
  69.         cin >> l >> r;
  70.         l-- , r--;
  71.         ll ans= 0;
  72.        
  73.        
  74.         ll pw = 1,  temp =0 ;
  75.  
  76.         if(l) ans = pref[l-1] , temp = suff[n-l]  ;
  77.         pw = Binex(10 ,l) ;
  78.  
  79.         ll ans2 = (((suff[n-r-1] - temp)% mod + mod) % mod )/ pw;
  80.         ans2 %= mod;
  81.  
  82.         ans = ans * Binex(10 , l +1) + ans2 ;
  83.         ans %= mod;
  84.  
  85.         if(r != n-1){
  86.             temp = pref[r] , pw = Binex(10 ,n-r-1);
  87.             ans2 = (pref[n-1] - (temp * pw)%mod);
  88.             ans2 += mod;
  89.             ans2 %= mod;
  90.              
  91.             ans = (ans * Binex(10 , n-r-1 )) % mod  + ans2 ;
  92.             ans %= mod;
  93.         }
  94.  
  95.         cout << ans <<nl;
  96.     }
  97.  
  98. // 13245
  99. // 54321
  100. // 972446260
  101.  
  102.  
  103. }      
  104.  
  105. int main(){
  106.     ios_base::sync_with_stdio(false);
  107.     cin.tie(nullptr);
  108.     cout.tie(nullptr);
  109.                            
  110.     //  files();
  111.     // freopen("fun.in", "r", stdin);
  112.     int testCase=1;
  113.         cin >> testCase ;
  114.     for(int i=1 ; i <= testCase ; i++){
  115.         // cout << "Case "<< i <<": " << nl;
  116.         solve();
  117.     }
  118.  
  119.     return 0;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement