Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<vector>
- #include <string>
- #include<algorithm>
- #include <iostream>
- #include <queue>
- #include<set>
- #include<unordered_set>
- #include<stack>
- #include<cmath>
- #include<math.h>
- #include<map>
- #include<unordered_map>
- #include<unordered_map>
- #include<random>
- #include<chrono>
- #include<ctime>
- #ifdef PERVEEVM_LOCAL
- std::mt19937 rnd(238);
- #else
- std::mt19937 rnd(std::chrono::high_resolution_clock::now().time_since_epoch().count());
- #endif
- // #include<ext/rope>
- using namespace std;
- typedef long long ll;
- typedef pair<long long, long long> pll;
- #define mp make_pair
- #define fi(b, c) for(auto i = b; i <= c; i++)
- #define fj(b, c) for(auto j = b; j <= c; j++)
- #define fk(b, c) for(auto k = b; k <= c; k++)
- #define fq(b, c) for(auto q = b; q <= c; q++)
- #define fw(b, c) for(auto w = b; w <= c; w++)
- #define fim(b, c) for(auto i = b; i >= c; i--)
- #define fjm(b, c) for(auto j = b; j >= c; j--)
- #define fkm(b, c) for(auto k = b; k >= c; k--)
- #define all(a) a.begin(), a.end()
- #define rall(a) a.rbegin(), a.rend()
- // #define sz(a) (ll)(a.size())
- #define fs first
- #define sd second
- #define endl "\n"
- #define sz(x) (ll)(x.size())
- template <class T>
- inline istream& operator >> (istream& in, vector <T>& a) {
- for (auto& i : a)
- in >> i;
- return in;
- }
- template <class T>
- inline ostream& operator << (ostream& out, vector <T>& a) {
- for (auto& i : a)
- out << i << "\n";
- return out;
- }
- template <class T, class U>
- inline istream& operator >> (istream& in, vector <pair <T, U>>& a) {
- for (auto& i : a)
- in >> i.first >> i.second;
- return in;
- }
- template <class T, class U>
- inline ostream& operator << (ostream& out, vector <pair <T, U>>& a) {
- for (auto& i : a)
- out << i.first << "" << i.second << endl;
- return out;
- }
- const ll inf = 1e9 + 123, llinf = 1e18 + 829, ura = 684395049517;
- void xru(){
- // setlocale(LC_ALL, "rus");
- // freopen(".in", "r", stdin);
- // freopen(".out", "w", stdout);
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cout.tie(NULL);
- }
- void run(){
- cout<<endl;
- system("pause");
- }
- void deb(map<ll, ll> m){
- cout << "------------------\n";
- for(pll i: m){
- cout << i.fs << "-" << i.sd << endl;
- }
- cout << "------------------\n";
- }
- map<ll, ll> fact(ll x){
- map<ll, ll> m;
- ll d = 2;
- while(d*d <= x){
- ll cnt = 0;
- while(x % d == 0){
- cnt++;
- x /= d;
- }
- if(cnt) m[d] = cnt;
- d++;
- }
- if(x != 1) m[x]++;
- return m;
- }
- struct ftree{
- ll n;
- vector<ll>t;
- ll sum(ll r){
- ll result = 0;
- for(; r >= 0; r = (r & (r+1)) - 1){
- result += t[r];
- }
- return result;
- }
- ll sum(ll l, ll r){
- if(l == 0) return sum(r);
- return sum(r) - sum(l-1);
- }
- void upd(ll id, ll x){
- for(; id < n; id = (id | (id+1))) t[id] += x;
- }
- void build(vector<ll>& a){
- n = sz(a);
- t.resize(n);
- fi(0, n-1) upd(i, a[i]);
- }
- };
- int main() {
- xru();
- ll n;
- cin >> n;
- vector<ll>a(n);
- cin >> a;
- vector<bool>prime(1e4+1,true);
- prime[0] = prime[1] = false;
- fi(2, 1e4){
- if(prime[i]){
- if(i*i <= 1e4){
- for(ll j = i*i; j<=1e4; j+=i){
- prime[j] = false;
- }
- }
- }
- }
- map<ll, ftree>m;
- fi(2, 1e4) {
- if(prime[i]){
- vector<ll>ad(n);
- ftree t;
- t.build(ad);
- m[i] = t;
- }
- }
- fi(0, n-1){
- map<ll, ll> div = fact(a[i]);
- for(pll j: div){
- m[j.fs].upd(i, j.sd);
- }
- }
- ll q;
- cin >> q;
- while(q--){
- ll typ;
- cin >> typ;
- if(typ == 0){
- ll id, x;
- cin >> id >> x;
- id--;
- map<ll, ll> div = fact(x), div0 = fact(a[id]);
- for(pll j: div0){
- div[j.fs] -= j.sd;
- }
- a[id] = x;
- for(pll j: div){
- m[j.fs].upd(id, j.sd);
- }
- } else {
- ll l, r;
- cin >> l >> r;
- l--, r--;
- ll ans = 1;
- for(pair<ll, ftree> ti: m){
- ans = ans * (ti.sd.sum(l, r) + 1) % (ll)(1e9+7);
- }
- cout << ans << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement