Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // (.Y.)™
- #define _USE_MATH_DEFINES
- #include <cmath>
- #include <cstdio>
- #include <climits>
- #include <cstring>
- #include <ctime>
- #include <algorithm>
- #include <functional>
- #include <iomanip>
- #include <iostream>
- #include <iterator>
- #include <list>
- #include <map>
- #include <queue>
- #include <set>
- #include <stack>
- #include <string>
- #include <vector>
- using namespace std;
- #define ui unsigned int
- #define ll long long int
- #define ull unsigned long long int
- #define pii pair <int, int>
- #define mp make_pair
- #define pb push_back
- #define ret return
- #define all(x) x.begin(), x.end()
- #define DEBUG(x) cout << #x << ": " << (x) << endl
- #define MOD 10007
- int t[100010];
- int mul(int p) {
- int res = 1;
- for ( ; p >= 0; p = (p & (p+1)) - 1) {
- res *= t[p];
- res %= MOD;
- }
- ret(res);
- }
- int gcdex(int a, int b, int& x, int& y) {
- if ( b == 0 ) {
- x = 1; y = 0;
- ret(a);
- }
- int x1, y1;
- int d = gcdex(b, a%b, x1, y1);
- x = y1;
- y = x1 - a/b * y1;
- ret(d);
- }
- int main() {
- freopen( "input.txt", "rt", stdin );
- #ifdef ONLINE_JUDGE
- freopen("output.txt", "wt", stdout);
- #endif
- int n;
- cin >> n;
- for (int i = 0; i < n; i++)
- t[i] = 1;
- for (int i = 0; i < n; i++) {
- int a;
- cin >> a;
- for (int j = i; j < n; j = (j | (j+1))) {
- t[j] *= a;
- t[j] %= MOD;
- }
- }
- int q;
- cin >> q;
- for (int i = 0; i < q; i++) {
- int L, R;
- cin >> L >> R;
- int m1 = mul(L-2);
- int m2 = mul(R-1);
- int x, y;
- gcdex(m1, MOD, x, y);
- if ( x < 0 )
- x += MOD;
- cout << (m2*x)%MOD << endl;
- }
- #ifndef ONLINE_JUDGE
- printf("\n>>> Time of execution %.3f seconds <<<\n", (double)clock() / CLOCKS_PER_SEC);
- #endif
- ret(0);
- }
Add Comment
Please, Sign In to add comment