제출 #1026021

#제출 시각아이디문제언어결과실행 시간메모리
1026021vjudge1Garaža (COCI17_garaza)C++17
0 / 160
4070 ms2644 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int M = 2 << 17, N = 1e5+5; int gc[M], a[N], n, q; void update(int p, int val, int s = 0, int e = n, int v = 1) { if(p < s || e <= p) return; if(e - s == 1) { gc[v] = val; return; } int mid = (s + e) / 2, lc = 2 * v, rc = lc + 1; update(p, val, s, mid, lc); update(p, val, mid, e, rc); gc[v] = gcd(gc[lc], gc[rc]); } int GCD(int l, int r, int s = 0, int e = n, int v = 1) { if(r <= s || e <= l) return 0; if(l <= s && e <= r) return gc[v]; int mid = (s + e) / 2, lc = 2 * v, rc = lc + 1; return gcd(GCD(l, r, s, mid, lc), GCD(l, r, mid, e, rc)); } int main() { int q; cin >> n >> q; for(int i = 0; i < n; i ++) { cin >> a[i]; update(i, a[i]); } while(q--) { int t, x, y; cin >>t >> x >> y; x--; if(t == 1) { a[x] = y; update(x, a[x]); } else { ll fans = 0;; for(int i = x; i < y; i ++) { int ans = 0; for(int j = 20; j >= 0; j--) { ans += (1 << j); if(i + ans > y || GCD(i, i + ans) == 1) ans -= (1 << j); } fans += ans; } cout << fans << endl; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...