Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define boAshraf ios_base::sync_with_stdio(false); cin.tie(NULL);
- #define ll long long
- #define sz(s) (int)(s).size()
- #define all(s) (s).begin(),(s).end()
- using namespace std;
- void File();
- void sol();
- const int mod=1e9+7,N=1e5+5;
- int pw[N],ivP[N];
- int add(int a,int b){
- return (a+b>=mod?a+b-mod:a+b);
- }
- int mul(int a,int b){
- return 1ll*a*b%mod;
- }
- int fp(int a,int b){
- if(!b)return 1;
- int ret=fp(a,b>>1);
- ret=mul(ret,ret);
- if(b&1)ret=mul(ret,a);
- return ret;
- }
- int fix(int x){
- x%=mod;
- x+=mod;
- x%=mod;
- return x;
- }
- int inv(int a){
- return fp(a,mod-2);
- }
- void pre(){
- pw[0]=1;
- ivP[0]=1;
- int iv=inv(10);
- for(int i=1;i<N;i++) {
- pw[i] = mul(pw[i - 1], 10);
- ivP[i]=mul(ivP[i-1],iv);
- }
- }
- int main() {
- boAshraf
- // File();
- freopen("fun.in", "r", stdin);
- int t = 1;
- cin >> t;
- pre();
- while (t--) {
- sol();
- }
- return 0;
- }
- void sol() {
- int n,q;
- cin>>n>>q;
- string s;
- cin>>s;
- vector<int>pre1(n),pre2(n);
- for (int i = 0; i < n; ++i) {
- pre1[i]=s[i]-'0';
- pre2[i]=s[i]-'0';
- pre1[i]=mul(pre1[i],pw[n-i-1]);
- pre2[i]=mul(pre2[i],pw[i]);
- if(i)pre1[i]=add(pre1[i],pre1[i-1]),pre2[i]=add(pre2[i],pre2[i-1]);
- }
- auto calc=[&](int l,int r)->int{
- if(l>r)return 0;
- return pre1[r]-(l?pre1[l-1]:0);
- };
- auto calc2=[&](int l,int r)->int{
- if(l>r)return 0;
- return pre2[r]-(l?pre2[l-1]:0);
- };
- while(q--){
- int l,r;
- cin>>l>>r;
- int st=l,st2=n-r+1;
- int d=st2-st;
- l--,r--;
- int ans=0;
- ans=add(ans,calc(0,l-1));
- ans=add(ans,calc(r+1,n-1));
- int temp=calc2(l,r);
- if(d>0)temp=mul(temp,pw[d]);
- else temp=mul(temp,ivP[-d]);
- ans=add(ans,temp);
- ans=fix(ans);
- cout<<ans<<'\n';
- }
- }
- void File() {
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- }
Advertisement
Add Comment
Please, Sign In to add comment