AhmedAshraff

Untitled

Jun 27th, 2025
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.08 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define boAshraf ios_base::sync_with_stdio(false); cin.tie(NULL);
  3. #define ll long long
  4. #define sz(s) (int)(s).size()
  5. #define all(s) (s).begin(),(s).end()
  6. using namespace std;
  7. void File();
  8. void sol();
  9. const int mod=1e9+7,N=1e5+5;
  10. int pw[N],ivP[N];
  11. int add(int a,int b){
  12.     return (a+b>=mod?a+b-mod:a+b);
  13. }
  14. int mul(int a,int b){
  15.     return 1ll*a*b%mod;
  16. }
  17. int fp(int a,int b){
  18.     if(!b)return 1;
  19.     int ret=fp(a,b>>1);
  20.     ret=mul(ret,ret);
  21.     if(b&1)ret=mul(ret,a);
  22.     return ret;
  23. }
  24. int fix(int x){
  25.     x%=mod;
  26.     x+=mod;
  27.     x%=mod;
  28.     return x;
  29. }
  30. int inv(int a){
  31.     return fp(a,mod-2);
  32. }
  33. void pre(){
  34.     pw[0]=1;
  35.     ivP[0]=1;
  36.     int iv=inv(10);
  37.     for(int i=1;i<N;i++) {
  38.         pw[i] = mul(pw[i - 1], 10);
  39.         ivP[i]=mul(ivP[i-1],iv);
  40.     }
  41. }
  42. int main() {
  43.     boAshraf
  44. //    File();
  45.     freopen("fun.in", "r", stdin);
  46.     int t = 1;
  47.     cin >> t;
  48.     pre();
  49.     while (t--) {
  50.         sol();
  51.     }
  52.     return 0;
  53. }
  54.  
  55. void sol() {
  56.     int n,q;
  57.     cin>>n>>q;
  58.     string s;
  59.     cin>>s;
  60.     vector<int>pre1(n),pre2(n);
  61.     for (int i = 0; i < n; ++i) {
  62.         pre1[i]=s[i]-'0';
  63.         pre2[i]=s[i]-'0';
  64.         pre1[i]=mul(pre1[i],pw[n-i-1]);
  65.         pre2[i]=mul(pre2[i],pw[i]);
  66.         if(i)pre1[i]=add(pre1[i],pre1[i-1]),pre2[i]=add(pre2[i],pre2[i-1]);
  67.     }
  68.     auto calc=[&](int l,int r)->int{
  69.         if(l>r)return 0;
  70.         return pre1[r]-(l?pre1[l-1]:0);
  71.     };
  72.     auto calc2=[&](int l,int r)->int{
  73.         if(l>r)return 0;
  74.         return pre2[r]-(l?pre2[l-1]:0);
  75.     };
  76.     while(q--){
  77.         int l,r;
  78.         cin>>l>>r;
  79.         int st=l,st2=n-r+1;
  80.         int d=st2-st;
  81.         l--,r--;
  82.         int ans=0;
  83.         ans=add(ans,calc(0,l-1));
  84.         ans=add(ans,calc(r+1,n-1));
  85.         int temp=calc2(l,r);
  86.         if(d>0)temp=mul(temp,pw[d]);
  87.         else temp=mul(temp,ivP[-d]);
  88.         ans=add(ans,temp);
  89.         ans=fix(ans);
  90.         cout<<ans<<'\n';
  91.     }
  92. }
  93.  
  94. void File() {
  95. #ifndef ONLINE_JUDGE
  96.     freopen("input.txt", "r", stdin);
  97.     freopen("output.txt", "w", stdout);
  98. #endif
  99. }
Advertisement
Add Comment
Please, Sign In to add comment