Advertisement
esraa_syam

Untitled

Jul 11th, 2024
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. #include "bits/stdc++.h"
  2. using namespace std;
  3.  
  4. #define nl "\n"
  5. #define ll long long
  6. #define mod  1'000'000'007
  7. #define all(v) v.begin(), v.end()
  8. #define rall(v) v.rbegin(), v.rend()
  9. #define sz(v) (int) v.size()
  10.  
  11. template<typename T = int>
  12. istream &operator>>(istream &in, vector<T> &v) {
  13.     for (auto &x: v) in >> x;
  14.     return in;
  15. }
  16.  
  17. template<typename T = int>
  18. ostream &operator<<(ostream &out, const vector<T> &v) {
  19.     for (const T &x: v) out << x << " ";
  20.     return out;
  21. }
  22.  
  23. void Sira() {
  24.     ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  25. #ifndef ONLINE_JUDGE
  26.     freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
  27. #endif
  28. }
  29.  
  30. void solve(){
  31.     int n , q;
  32.     cin >> n >> q;
  33.  
  34.     string s;
  35.     cin >> s;
  36.  
  37.     vector < ll > pref(n + 1)  , suff(n + 1);
  38.  
  39.     auto fast_pow = [&](ll a , ll b) {
  40.         ll res = 1;
  41.         while(b) {
  42.             if(b & 1) {
  43.                 res = res * a % mod;
  44.             }
  45.             a = a * a % mod;
  46.             b >>= 1;
  47.         }
  48.         return res;
  49.     };
  50.  
  51.     for(int i = 1 ; i <= n ; i++) {
  52.         pref[i] = pref[i - 1] * 10 + (s[i - 1] - '0');
  53.         pref[i] %= mod;
  54.     }
  55.  
  56.     for(int i = n ; i >= 1 ; i--) {
  57.         suff[i] = suff[i + 1] + (s[i - 1] - '0') * fast_pow(10 , n - i);
  58.         suff[i] %= mod;
  59.     }
  60.  
  61.  
  62.     while(q--) {
  63.         int l , r;
  64.         cin >> l >> r;
  65.         // curr1 = 1 -> l - 1
  66.         // curr2 = l -> r
  67.         // curr3 = r + 1 -> n
  68.  
  69.         ll curr1 = pref[l - 1];
  70.         ll curr2 = suff[r + 1];
  71. //        cout << pref[l - 1] << " " << pref[r] << nl;
  72.         ll curr3 = pref[r] - (l == 1 ? 0 : pref[l - 1]) * fast_pow(10 , r - l + 1);
  73.         curr3 = (curr3 + mod) % mod;
  74.         curr2 = (curr2 + mod) % mod;
  75.         curr1 = (curr1 + mod) % mod;
  76.  
  77.         string s = to_string(curr3);
  78.         reverse(all(s));
  79.         curr3 = stoll(s);
  80.  
  81.         string s1;
  82.  
  83.  
  84.        if(l > 1) s1 += to_string(curr1);
  85.        s1 += to_string(curr3);
  86.        if(r < n) s1 += to_string(curr2);
  87.         ll ans = stoll(s1);
  88.         ans %= mod;
  89.  
  90.         cout << ans << nl;
  91.     }
  92.  
  93. }
  94.  
  95. int main() {
  96.     Sira();
  97.     int t = 1;
  98.     cin >> t;
  99.     while(t--){
  100.         solve();
  101.     }
  102.     return 0;
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement