Here is my code…
#include "bits/stdc++.h" using namespace std;
#define ll unsigned long long
ll r, c;
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; }
ll segtrees[100][100000];
void build() {
for(ll i = 0; i<r; i++)
for(ll j = 0; j<100000; j++)
segtrees[i][j]=0; }
void update(ll rw, ll col, ll val, ll idx, ll hd, ll tl) {
//cout << "U " << idx << " " << hd << " " << tl << "\n";
if(hd==tl && tl==col)
{
segtrees[rw][idx] = val;
return;
}
ll mid = (hd+tl)/2;
if(col>=hd && col<=mid)
update(rw, col, val, idx*2, hd, mid);
else if(col>mid && col<=tl)
update(rw, col, val, idx*2+1, mid+1, tl);
segtrees[rw][idx]=gcd2(segtrees[rw][idx*2], segtrees[rw][idx*2+1]); }
ll query(ll rw, ll i, ll j, ll idx, ll hd, ll tl) {
//cout << "Q " << idx << " " << hd << " " << tl << "\n";
ll mid = (hd+tl)/2;
if(hd>=i && hd<=j && tl>=i && tl<=j)
return segtrees[rw][idx];
else if((hd>=i && hd<=j && (tl>=j || tl <=i)) || (tl>=i && tl<=j && (hd>=j || hd<=i)))
return gcd2(query(rw, i, j, idx*2, hd, mid), query(rw, i, j, idx*2+1, mid+1, tl));
else
{
//cout << "POOP!\n";
return 0;
} }
void calculate(ll p, ll q, ll u, ll v) {
ll ans = 0;
for(int i = p; i<=u; i++)
ans = gcd2(ans, query(i, q, v, 1, 0, c-1));
cout << ans << endl; }
int main() {
ll n;
ll p, q, u, v, k;
cin >> r >> c >> n;
build();
while(n--)
{
int choice;
cin >> choice;
choice--;
cin >> p >> q;
if(choice)
{
cin >> u >> v;
calculate(p, q, u, v);
}
else
{
cin >> k;
update(p, q, k, 1, 0, c-1);
}
}
}
I’m trying to score a 37. My program maintains N segment trees for the N rows. Why do I get a WA verdict?
Thanks,
Arpan