Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define nmax 100001
- using namespace std;
- ifstream f("aecmmdci.in");
- ofstream g("aecmmdci.out");
- int arb[4*nmax+55];
- int i,n,v,m,midc,x,y,t;
- int cmmdc(int a,int b)
- {
- int r;
- if(a==0&&b==0)
- return -1;
- else
- {
- if(a<b)
- swap(a,b);
- if(b==0)
- return a;
- else
- {
- r=a%b;
- while(r!=0)
- {
- a=b;
- b=r;
- r=a%b;
- }
- return b;
- }
- }
- }
- void update(int nod,int st,int dr,int poz,int val)
- {
- if(st==dr)
- {
- arb[nod]=val;
- return;
- }
- int mij=(st+dr)/2;
- if(poz<=mij)update(2*nod,st,mij,poz,val);
- else update(2*nod+1,mij+1,dr,poz,val);
- arb[nod]=cmmdc(arb[2*nod],arb[2*nod+1]);
- }
- void query(int nod,int st,int dr,int a,int b)
- {
- if(a<=st&&dr<=b)
- {
- midc=cmmdc(midc,arb[nod]);
- return;
- }
- int mij=(st+dr)/2;
- if(a<=mij)query(2*nod,st,mij,a,b);
- if(mij<b)query(2*nod+1,mij+1,dr,a,b);
- }
- int main()
- {
- f>>n;
- for(i=1;i<=n;++i)
- {
- f>>v;
- update(1,1,n,i,v);
- }
- f>>m;
- while(m--)
- {
- f>>t>>x>>y;
- if(t==1)
- midc=0,query(1,1,n,x,y),g<<midc<<'\n';
- else
- update(1,1,n,x,y);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement