Submission #1301632

#TimeUsernameProblemLanguageResultExecution timeMemory
1301632Faisal_SaqibGaraža (COCI17_garaza)C++20
40 / 160
4094 ms7900 KiB
#include <bits/stdc++.h> // #include <numeric> using namespace std; const int N=1e5+10,LG=17; int a[N],gd[N][LG],n,q,rp[N]; int get(int l,int r) { int g=__lg(r-l+1); return __gcd(gd[l][g],gd[r-(1<<g)+1][g]); } void compute() { for(int i=1;i<=n;i++)gd[i][0]=a[i]; for(int j=1;j<LG;j++) { for(int i=1;i+(1<<j)-1<=n;i++) { gd[i][j]=__gcd(gd[i][j-1],gd[i+(1<<(j-1))][j-1]); } } rp[n+1]=n; for(int i=n;i>=1;i--) { rp[i]=rp[i+1]; // cout<<i<<' '<<rp[i]<<' '<<get(i,rp[i])<<endl; while(rp[i]>=i and get(i,rp[i])==1)rp[i]--; } // for(int i=1;i<=n;i++)cout<<rp[i]<<' '; // cout<<endl; } int main() { ios::sync_with_stdio(0); cout.tie(0); cin.tie(0); cin>>n>>q; for(int i=1;i<=n;i++) { cin>>a[i]; } compute(); while(q--) { int t; cin>>t; if(t==1) { int x,v; cin>>x>>v; a[x]=v; compute(); } else { int l,r; cin>>l>>r; long long ans=0; for(int i=l;i<=r;i++) ans+=min(rp[i],r)-i+1; cout<<ans<<endl; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...