Submission #278347

# Submission time Handle Problem Language Result Execution time Memory
278347 2020-08-21T12:05:20 Z _7_7_ Game (IOI13_game) C++14
80 / 100
3978 ms 256004 KB
#include "game.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
 
using namespace std;
using namespace __gnu_pbds;
 
//#define int long long
//#pragma GCC optimize("Ofast")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4")
 
 
#define file(s) freopen(s".in","r",stdin); freopen(s".out","w",stdout);
#define fastio ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define all(x) x.begin(), x.end()
#define sz(s) (int)s.size()
#define pb push_back
#define ppb pop_back
#define mp make_pair
#define s second
#define f first
 
 
 
 
typedef pair < long long, long long > pll;    
typedef unsigned long long ull;
typedef pair < int, int > pii;
typedef vector < pii > vpii;
typedef vector < int > vi;
typedef long double ldb;  
typedef long long ll;  
typedef double db;
 
typedef tree < int, null_type, less < int >, rb_tree_tag, tree_order_statistics_node_update > ordered_set;
 
const int inf = 1e9, maxn = 5e5 + 11, mod = 998244353, N = 1e7 + 7e6 + 11;
const int dx[] = {-1, 0, 1, 0}, dy[] = {0, -1, 0, 1}, block = 300;
const pii base = mp(1171, 3307), Mod = mp(1e9 + 7, 1e9 + 9);
const db eps = 1e-12, pi = acos(-1);
const ll INF = 1e18;

int Sz, n, m;
               	
ll gcd (ll x, ll y) {
	while (1) {
		if (x > y)
			swap(x, y);
		if (!x)				
			return y;		
//		cerr << x << ' ' << y << endl;
		y %= x;
	}
}

struct ST {
	int l, r;
	ll g;
};

ST T[N];

void upd1 (int pos, ll x, int v, int tl = 0, int tr = m - 1) {
	if (tl == tr) {
		T[v].g = x;
		return;
	}

	int tm = (tl + tr) >> 1;
	if (pos <= tm) {
		if (!T[v].l) 
			T[v].l = ++Sz;
		upd1(pos, x, T[v].l, tl, tm);
	} else {
		if (!T[v].r)
			T[v].r = ++Sz;
		upd1(pos, x, T[v].r, tm + 1, tr);
	}

	T[v].g = gcd(T[T[v].l].g, T[T[v].r].g);
}

ll get1 (int l, int r, int v, int tl = 0, int tr = m - 1) {
	if (l > r || tl > r || l > tr)
		return 0;

	if (l <= tl && tr <= r)
		return T[v].g;

	int tm = (tl + tr) >> 1;
	
	ll res = 0;
	
	if (T[v].l)
		res = get1(l, r, T[v].l, tl, tm);

	if (T[v].r)
		res = gcd(res, get1(l, r, T[v].r, tm + 1, tr));

 	return res;
}

ll get2 (int pos, int v, int tl = 0, int tr = m - 1) {
	if (tl == tr) 
		return T[v].g; 

	int tm = (tl + tr) >> 1;
	if (pos <= tm) {
		if (!T[v].l)
			return 0;
		return get2(pos, T[v].l, tl, tm);
	}

	if (!T[v].r)
		return 0;

	return get2(pos, T[v].r, tm + 1, tr);
}


struct STT {
	int l, r, v;
};

STT TT[maxn];

int Sz1;



void upd (int x, int y, ll z, int v = 1, int tl = 0, int tr = n - 1) {
	if (tl == tr) {
		upd1(y, z, TT[v].v);
		return;
	}

	int tm = (tl + tr) >> 1;

	if (x <= tm) {
		if (!TT[v].l) {
//			assert(Sz + 1 < N);
//			assert(Sz1 + 1 < maxn);
//			if (Sz + 1 == N || Sz1 + 1 == maxn) 
//				exit(0);
			TT[v].l = ++Sz1;
			TT[Sz1].v = ++Sz;
		}
		upd(x, y, z, TT[v].l, tl, tm);
	} else {
		if (!TT[v].r) {
//			assert(Sz + 1 < N);
//			assert(Sz1 + 1 < maxn);
//			if (Sz + 1 == N || Sz1 + 1 == maxn) 
//				exit(0);			
			TT[v].r = ++Sz1;
			TT[Sz1].v = ++Sz;
		}
		upd(x, y, z, TT[v].r, tm + 1, tr);
	}

	ll cur = 0;
	if (TT[v].l) 
		cur = get2(y, TT[TT[v].l].v); 
	
	if (TT[v].r)
		cur = gcd(cur, get2(y, TT[TT[v].r].v));

	upd1(y, cur, TT[v].v);
}

ll get (int l, int r, int x, int y, int v, int tl = 0, int tr = n - 1) {
	if (l > r || tl > r || l > tr)
		return 0;

	if (l <= tl && tr <= r)
		return get1(x, y, TT[v].v);

	int tm = (tl + tr) >> 1;	
	
	ll res = 0;
	
	if (TT[v].l)
		res = get(l, r, x, y, TT[v].l, tl, tm);

	if (TT[v].r)
		res = gcd(res, get(l, r, x, y, TT[v].r, tm + 1, tr));

	return res;
}


void init(int r, int c) {
//	assert(0);
	n = r, m = c;
	TT[++Sz1].v = ++Sz;
}

void update(int x, int y, ll z) {
//	cerr << x << ' ' << y << ' ' << z << endl;
	upd(x, y, z, 1);
//	cerr << Sz << ' ' << Sz1 << endl;
}

long long calculate(int lf, int x, int rg, int y) {		
//	cerr << x << ' ' << y << ' ' << lf << ' ' << rg << endl;
    return get(lf, rg, x, y, 1);
}





Compilation message

grader.c: In function 'int main()':
grader.c:18:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
   18 |  int res;
      |      ^~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 1 ms 384 KB Output is correct
8 Correct 1 ms 384 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 1 ms 384 KB Output is correct
12 Correct 1 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 0 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 682 ms 8568 KB Output is correct
5 Correct 487 ms 8904 KB Output is correct
6 Correct 519 ms 5752 KB Output is correct
7 Correct 585 ms 5368 KB Output is correct
8 Correct 398 ms 4344 KB Output is correct
9 Correct 521 ms 5592 KB Output is correct
10 Correct 473 ms 5112 KB Output is correct
11 Correct 1 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 1 ms 384 KB Output is correct
8 Correct 0 ms 384 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 1 ms 384 KB Output is correct
12 Correct 969 ms 10232 KB Output is correct
13 Correct 1520 ms 3608 KB Output is correct
14 Correct 308 ms 968 KB Output is correct
15 Correct 1778 ms 5036 KB Output is correct
16 Correct 234 ms 9720 KB Output is correct
17 Correct 893 ms 6692 KB Output is correct
18 Correct 1389 ms 10048 KB Output is correct
19 Correct 1380 ms 10104 KB Output is correct
20 Correct 1318 ms 9700 KB Output is correct
21 Correct 1 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 256 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 1 ms 384 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 1 ms 384 KB Output is correct
8 Correct 1 ms 360 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 1 ms 384 KB Output is correct
12 Correct 662 ms 8540 KB Output is correct
13 Correct 449 ms 8876 KB Output is correct
14 Correct 533 ms 5720 KB Output is correct
15 Correct 620 ms 5424 KB Output is correct
16 Correct 418 ms 4292 KB Output is correct
17 Correct 598 ms 5460 KB Output is correct
18 Correct 597 ms 5112 KB Output is correct
19 Correct 957 ms 10232 KB Output is correct
20 Correct 1476 ms 3676 KB Output is correct
21 Correct 318 ms 1016 KB Output is correct
22 Correct 1786 ms 4984 KB Output is correct
23 Correct 223 ms 9628 KB Output is correct
24 Correct 775 ms 6652 KB Output is correct
25 Correct 1515 ms 10236 KB Output is correct
26 Correct 1081 ms 10228 KB Output is correct
27 Correct 1076 ms 9644 KB Output is correct
28 Correct 846 ms 125868 KB Output is correct
29 Correct 1960 ms 140792 KB Output is correct
30 Correct 3978 ms 101900 KB Output is correct
31 Correct 3711 ms 78056 KB Output is correct
32 Correct 569 ms 1272 KB Output is correct
33 Correct 738 ms 2424 KB Output is correct
34 Correct 495 ms 137848 KB Output is correct
35 Correct 1340 ms 70356 KB Output is correct
36 Correct 2486 ms 138200 KB Output is correct
37 Correct 2061 ms 138512 KB Output is correct
38 Correct 2065 ms 137848 KB Output is correct
39 Correct 1683 ms 106464 KB Output is correct
40 Correct 0 ms 256 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 0 ms 256 KB Output is correct
5 Correct 1 ms 256 KB Output is correct
6 Correct 1 ms 384 KB Output is correct
7 Correct 0 ms 384 KB Output is correct
8 Correct 1 ms 384 KB Output is correct
9 Correct 1 ms 384 KB Output is correct
10 Correct 1 ms 384 KB Output is correct
11 Correct 1 ms 384 KB Output is correct
12 Correct 584 ms 8696 KB Output is correct
13 Correct 450 ms 8936 KB Output is correct
14 Correct 481 ms 5752 KB Output is correct
15 Correct 540 ms 5460 KB Output is correct
16 Correct 383 ms 4344 KB Output is correct
17 Correct 557 ms 5504 KB Output is correct
18 Correct 546 ms 5200 KB Output is correct
19 Correct 948 ms 10248 KB Output is correct
20 Correct 1486 ms 3712 KB Output is correct
21 Correct 311 ms 1016 KB Output is correct
22 Correct 1745 ms 4984 KB Output is correct
23 Correct 232 ms 9720 KB Output is correct
24 Correct 770 ms 6520 KB Output is correct
25 Correct 1248 ms 10104 KB Output is correct
26 Correct 1081 ms 10232 KB Output is correct
27 Correct 1004 ms 9740 KB Output is correct
28 Correct 875 ms 125672 KB Output is correct
29 Correct 1903 ms 140972 KB Output is correct
30 Correct 3952 ms 101856 KB Output is correct
31 Correct 3791 ms 78052 KB Output is correct
32 Correct 569 ms 1272 KB Output is correct
33 Correct 742 ms 2496 KB Output is correct
34 Correct 506 ms 137900 KB Output is correct
35 Correct 1395 ms 70520 KB Output is correct
36 Correct 2465 ms 138364 KB Output is correct
37 Correct 2037 ms 138328 KB Output is correct
38 Correct 2061 ms 137884 KB Output is correct
39 Runtime error 1185 ms 256004 KB Execution killed with signal 9
40 Halted 0 ms 0 KB -