Source Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int fp(int x ,int p){
    if(p == 0) return 1;
    if(p == 1) return x;
    if(p & 1)
        return fp(x , p - 1) % 10 * x % 10;
    return fp(x , p / 2) % 10 * fp(x , p / 2) % 10;
}
int f(int x ,int shift){

}
int main(){

    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);


    string s;
    cin >> s;

    int n = s.size();

    s = '#' + s;

    for(char &c : s)
        c -= '0';

    vector<int> suffix(n + 3 , 0);

    for(int i = n ; i >= 1 ; i--){
        suffix[i] = (suffix[i + 1] + fp(2 , n - i) * s[i]) % 10;
    }

    int q;
    cin >> q;
    while(q--){

        int l , r;
        cin >> l >> r;
        int tot = suffix[l];
        int part = suffix[r + 1];
        tot = (tot - part + 10) % 10;
        tot /= fp(2 , n - r);
        if(s[r] == 1 && tot == 0) tot = 5;
        cout << tot << '\n';
    }
    return 0;
}
Copy
Binarithm Greedious
GNU G++17
186 ms
1.8 MB
Wrong Answer