Guest User

Untitled

a guest
Jun 23rd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. // (.Y.)™
  2.  
  3. #define _USE_MATH_DEFINES
  4.  
  5. #include <cmath>
  6. #include <cstdio>
  7. #include <climits>
  8. #include <cstring>
  9. #include <ctime>
  10.  
  11. #include <algorithm>
  12. #include <functional>
  13. #include <iomanip>
  14. #include <iostream>
  15. #include <iterator>
  16. #include <list>
  17. #include <map>
  18. #include <queue>
  19. #include <set>
  20. #include <stack>
  21. #include <string>
  22. #include <vector>
  23.  
  24. using namespace std;
  25.  
  26. #define ui  unsigned           int
  27. #define  ll          long long int
  28. #define ull unsigned long long int
  29.  
  30. #define pii pair <int, int>
  31.  
  32. #define mp make_pair
  33. #define pb push_back
  34.  
  35. #define ret return
  36.  
  37. #define all(x) x.begin(), x.end()
  38.  
  39. #define DEBUG(x) cout << #x << ": " << (x) << endl
  40.  
  41. #define MOD 10007
  42.  
  43. int t[100010];
  44.  
  45. int mul(int p) {
  46.     int res = 1;
  47.  
  48.     for ( ; p >= 0; p = (p & (p+1)) - 1) {
  49.         res *= t[p];
  50.         res %= MOD;
  51.     }
  52.  
  53.     ret(res);
  54. }
  55.  
  56. int gcdex(int a, int b, int& x, int& y) {
  57.     if ( b == 0 ) {
  58.         x = 1; y = 0;
  59.         ret(a);
  60.     }
  61.  
  62.     int x1, y1;
  63.  
  64.     int d = gcdex(b, a%b, x1, y1);
  65.  
  66.     x = y1;
  67.     y = x1 - a/b * y1;
  68.  
  69.     ret(d);
  70. }
  71.  
  72. int main() {
  73.     freopen( "input.txt", "rt", stdin );
  74.  
  75. #ifdef ONLINE_JUDGE
  76.     freopen("output.txt", "wt", stdout);
  77. #endif
  78.  
  79.     int n;
  80.     cin >> n;
  81.  
  82.     for (int i = 0; i < n; i++)
  83.         t[i] = 1;
  84.  
  85.     for (int i = 0; i < n; i++) {
  86.         int a;
  87.         cin >> a;
  88.  
  89.         for (int j = i; j < n; j = (j | (j+1))) {
  90.             t[j] *= a;
  91.             t[j] %= MOD;
  92.         }
  93.     }
  94.  
  95.     int q;
  96.     cin >> q;
  97.  
  98.     for (int i = 0; i < q; i++) {
  99.         int L, R;
  100.         cin >> L >> R;
  101.  
  102.         int m1 = mul(L-2);
  103.         int m2 = mul(R-1);
  104.  
  105.         int x, y;
  106.  
  107.         gcdex(m1, MOD, x, y);
  108.  
  109.         if ( x < 0 )
  110.             x += MOD;
  111.  
  112.         cout << (m2*x)%MOD << endl;
  113.     }
  114.  
  115. #ifndef ONLINE_JUDGE
  116.     printf("\n>>> Time of execution %.3f seconds <<<\n", (double)clock() / CLOCKS_PER_SEC);
  117. #endif
  118.  
  119.     ret(0);
  120. }
Add Comment
Please, Sign In to add comment