Advertisement
Zeinab_Hamdy

Untitled

Jul 10th, 2024
504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 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.  
  26.  
  27. void solve(){
  28.  
  29.     int n , q , l ,  r;
  30.     string s ;
  31.  
  32.     cin >> n >> q >> s;
  33.  
  34.     vector < ll > pref(n) , suff(n);
  35.     for(int i =0 ; i < n ; i++){
  36.         pref[i] = (s[i] - '0');
  37.         if(i){
  38.             pref[i] = pref[i-1] * 10 + pref[i];
  39.             pref[i] %= mod;
  40.         }
  41.         // cout << pref[i] << nl;
  42.     }
  43.  
  44.     string t= s;
  45.     reverse(all(t));
  46.     for(int i = n-1 ; i >=0 ; i--){
  47.         suff[i] = (t[i] - '0');
  48.         if(i != n-1){
  49.             suff[i] = suff[i] * pow(10 , sz(to_string(suff[i+1]))) + suff[i+1];
  50.             suff[i] %= mod;
  51.         }
  52.         // cout << suff[i] << nl;
  53.     }
  54.  
  55.     while(q--){
  56.         cin >> l >> r;
  57.         l-- , r--;
  58.         ll ans= 0;
  59.        
  60.        
  61.         ll pw = 1,  temp =0 ;
  62.  
  63.         if(l) ans = pref[l-1] , temp = suff[n-l] , pw = pow(10 , sz(to_string(suff[n-l])) ) ;
  64.  
  65.         ll ans2 = (((suff[n-r-1] - temp)% mod + mod) % mod )/ pw;
  66.         ans2 %= mod;
  67.  
  68.         // cout << ans2 << nl;
  69.         ans = ans *(ll) pow(10 , sz(to_string(ans2))) %mod + ans2 ;
  70.         ans %= mod;
  71.  
  72.  
  73.         if(r != n-1){
  74.             temp = pref[r] , pw = pow(10 , sz(to_string(pref[n-1])) - sz(to_string(pref[r])));
  75.             ans2 = (pref[n-1] - temp * pw);
  76.             ans2 %= mod;
  77.             ans2 += mod;
  78.             ans2 %= mod;
  79.             // cout << ans2  << nl;
  80.        
  81.             ans = (ans * (ll)pow(10 , sz(to_string(ans2)) )) % mod  + ans2 ;
  82.             ans %= mod;
  83.         }
  84.  
  85.         cout << ans <<nl;
  86.     }
  87.  
  88.  
  89.  
  90.  
  91. }      
  92.  
  93. int main(){
  94.     ios_base::sync_with_stdio(false);
  95.     cin.tie(nullptr);
  96.     cout.tie(nullptr);
  97.                            
  98.     //  files();
  99.     // freopen("fun.in", "r", stdin);
  100.     int testCase=1;
  101.         cin >> testCase ;
  102.     for(int i=1 ; i <= testCase ; i++){
  103.         // cout << "Case "<< i <<": " << nl;
  104.         solve();
  105.     }
  106.  
  107.     return 0;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement