Advertisement
Ginger_samurai

Untitled

Sep 4th, 2020
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.43 KB | None | 0 0
  1. #include<vector>
  2. #include <string>
  3. #include<algorithm>
  4. #include <iostream>
  5. #include <queue>
  6. #include<set>
  7. #include<unordered_set>
  8. #include<stack>
  9. #include<cmath>
  10. #include<math.h>
  11. #include<map>
  12. #include<unordered_map>
  13. #include<unordered_map>
  14. #include<random>
  15. #include<chrono>
  16. #include<ctime>
  17. #ifdef PERVEEVM_LOCAL
  18.     std::mt19937 rnd(238);
  19. #else
  20.     std::mt19937 rnd(std::chrono::high_resolution_clock::now().time_since_epoch().count());
  21. #endif
  22. // #include<ext/rope>
  23. using namespace std;
  24. typedef long long ll;
  25. typedef pair<long long, long long> pll;
  26. #define mp make_pair
  27. #define fi(b, c) for(auto i = b; i <= c; i++)
  28. #define fj(b, c) for(auto j = b; j <= c; j++)
  29. #define fk(b, c) for(auto k = b; k <= c; k++)
  30. #define fq(b, c) for(auto q = b; q <= c; q++)
  31. #define fw(b, c) for(auto w = b; w <= c; w++)
  32. #define fim(b, c) for(auto i = b; i >= c; i--)
  33. #define fjm(b, c) for(auto j = b; j >= c; j--)
  34. #define fkm(b, c) for(auto k = b; k >= c; k--)
  35. #define all(a) a.begin(), a.end()
  36. #define rall(a) a.rbegin(), a.rend()
  37. // #define sz(a) (ll)(a.size())
  38. #define fs first
  39. #define sd second
  40. #define endl "\n"
  41. #define sz(x) (ll)(x.size())
  42. template <class T>
  43. inline istream& operator >> (istream& in, vector <T>& a) {
  44.     for (auto& i : a)
  45.         in >> i;
  46.     return in;
  47. }
  48. template <class T>
  49. inline ostream& operator << (ostream& out, vector <T>& a) {
  50.     for (auto& i : a)
  51.         out << i << "\n";
  52.     return out;
  53. }
  54. template <class T, class U>
  55. inline istream& operator >> (istream& in, vector <pair <T, U>>& a) {
  56.     for (auto& i : a)
  57.         in >> i.first >> i.second;
  58.     return in;
  59. }
  60. template <class T, class U>
  61. inline ostream& operator << (ostream& out, vector <pair <T, U>>& a) {
  62.     for (auto& i : a)
  63.         out << i.first << "" << i.second << endl;
  64.     return out;
  65. }
  66. const ll inf = 1e9 + 123, llinf = 1e18 + 829, ura = 684395049517;
  67. void xru(){
  68. //  setlocale(LC_ALL, "rus");
  69. //  freopen(".in", "r", stdin);
  70. //  freopen(".out", "w", stdout);
  71.  ios_base::sync_with_stdio(false);
  72.  cin.tie(NULL);
  73.  cout.tie(NULL);
  74. }
  75. void run(){
  76.     cout<<endl;
  77.     system("pause");
  78. }
  79.  
  80.  
  81.  
  82. void deb(map<ll, ll> m){
  83.     cout << "------------------\n";
  84.     for(pll i: m){
  85.         cout << i.fs << "-" << i.sd << endl;
  86.     }
  87.     cout << "------------------\n";
  88. }
  89. map<ll, ll> fact(ll x){
  90.     map<ll, ll> m;
  91.     ll d = 2;
  92.     while(d*d <= x){
  93.         ll cnt = 0;
  94.         while(x % d == 0){
  95.             cnt++;
  96.             x /= d;
  97.         }
  98.         if(cnt) m[d] = cnt;
  99.         d++;
  100.     }
  101.     if(x != 1) m[x]++;
  102.     return m;
  103. }
  104.  
  105.  
  106.  
  107.  
  108. struct ftree{
  109.     ll n;
  110.     vector<ll>t;
  111.  
  112.     ll sum(ll r){
  113.         ll result = 0;
  114.         for(; r >= 0; r = (r & (r+1)) - 1){
  115.             result += t[r];
  116.         }
  117.         return result;
  118.     }
  119.  
  120.     ll sum(ll l, ll r){
  121.         if(l == 0) return sum(r);
  122.         return sum(r) - sum(l-1);
  123.     }
  124.  
  125.     void upd(ll id, ll x){
  126.         for(; id < n; id = (id | (id+1))) t[id] += x;
  127.     }
  128.  
  129.     void build(vector<ll>& a){
  130.         n = sz(a);
  131.         t.resize(n);
  132.         fi(0, n-1) upd(i, a[i]);
  133.     }
  134. };
  135.  
  136. int main() {
  137.     xru();
  138.     ll n;
  139.     cin >> n;
  140.     vector<ll>a(n);
  141.     cin >> a;
  142.  
  143.     vector<bool>prime(1e4+1,true);
  144.     prime[0] = prime[1] = false;
  145.     fi(2, 1e4){
  146.         if(prime[i]){
  147.             if(i*i <= 1e4){
  148.                 for(ll j = i*i; j<=1e4; j+=i){
  149.                     prime[j] = false;
  150.                 }
  151.             }
  152.         }
  153.     }
  154.     map<ll, ftree>m;
  155.     fi(2, 1e4) {
  156.         if(prime[i]){
  157.             vector<ll>ad(n);
  158.             ftree t;
  159.             t.build(ad);
  160.             m[i] = t;
  161.         }
  162.     }
  163.  
  164.     fi(0, n-1){
  165.         map<ll, ll> div = fact(a[i]);
  166.         for(pll j: div){
  167.             m[j.fs].upd(i, j.sd);
  168.         }
  169.     }
  170.  
  171.  
  172.     ll q;
  173.     cin >> q;
  174.     while(q--){
  175.         ll typ;
  176.         cin >> typ;
  177.         if(typ == 0){
  178.             ll id, x;
  179.             cin >> id >> x;
  180.             id--;
  181.             map<ll, ll> div = fact(x), div0 = fact(a[id]);
  182.             for(pll j: div0){
  183.                 div[j.fs] -= j.sd;
  184.             }
  185.             a[id] = x;
  186.             for(pll j: div){
  187.                 m[j.fs].upd(id, j.sd);
  188.             }
  189.         } else {
  190.             ll l, r;
  191.             cin >> l >> r;
  192.             l--, r--;
  193.             ll ans = 1;
  194.             for(pair<ll, ftree> ti: m){
  195.                 ans = ans * (ti.sd.sum(l, r) + 1) % (ll)(1e9+7);
  196.             }
  197.             cout << ans << endl;
  198.         }
  199.     }
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement