# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
65076 | theknife2001 | Game (IOI13_game) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "game.h"
#include <bits/stdc++.h>
#define mid (l+r)/2
using namespace std;
long long gcd2(long long X, long long Y) {
long long tmp;
while (X != Y && Y != 0) {
tmp = X;
X = Y;
Y = tmp % Y;
}
return X;
}
const int N=2055;
long long tree[N*4][2055];
int n,m;
void init(int R, int C)
{
n=R;
m=C;
}
void up(int l , int r , int node , int ind , long long val , int lev)
{
if(l==r&&l==ind)
{
tree[node][lev]=val;
return ;
}
if(ind<=mid)
up(l,mid,node*2,ind,val,lev);
else
up(mid+1,r,node*2+1,ind,val,lev);
tree[node][lev]=gcd2(tree[node*2][lev],tree[node*2+1][lev]);
}
long long query(int l , int r , int node , int x , int y , int lev)
{
if(x<=l&&r<=y)
return tree[node][lev];
if(l>y||r<x)
return 0;
long long temp1=0;
long long temp2=0;
temp1=query(l,mid,node*2,x,y,lev);
temp2=query(mid+1,r,node*2+1,x,y,lev);
return gcd2(temp1,temp2);
}
void update(int P, int Q, long long K)
{
if(n<105)
up(0,m-1,1,Q,K,P);
}
long long calculate(int P, int Q, int U, int V)
{
long long ans=0;
for(int i=P;i<=U;i++)
{
else
ans++;
if(n<105)
ans=gcd2(ans,query(0,m-1,1,Q,V,i));
}
return ans;
}