Submission #923050

# Submission time Handle Problem Language Result Execution time Memory
923050 2024-02-06T13:37:22 Z oblantis Horses (IOI15_horses) C++17
57 / 100
532 ms 87140 KB
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define all(v) v.begin(), v.end()
#define pb push_back
#define ss second
#define ff first
#define vt vector
#define ll __int128
using namespace std;
using namespace __gnu_pbds;
//typedef long long ll;
typedef pair<int, int> pii;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
const ll inf = 2e10;
const int mod = 1e9+7;
const int maxn = 5e5 + 4;
ll t[maxn * 4], it, xl;
int n;
ll a[maxn], b[maxn], mx[maxn * 4];
set<int> s;
void upd(int v, int l, int r){
	if(l + 1 == r){
		t[v] = a[l];
		mx[v] = b[l];
		return;
	}
	if((l + r) / 2 <= it)upd(v * 2 + 2, (l + r) / 2, r);
	else upd(v * 2 + 1, l, (l + r) / 2);
	t[v] = t[v * 2 + 1] * t[v * 2 + 2] % mod;
	mx[v] = max(mx[v * 2 + 1], mx[v * 2 + 2]);
}
ll gm(int v, int l, int r){
	if(xl <= l)return mx[v];
	if(r <= xl)return 0;
	return max(gm(v * 2 + 1, l, (l + r) / 2), gm(v * 2 + 2, (l + r) / 2, r));
}
ll mlp(int v, int l, int r){
	if(r <= xl + 1)return t[v];
	if(xl < l) return 1;
	return 1ll * mlp(v * 2 + 1, l, (l + r) / 2) * mlp(v * 2 + 2, (l + r) / 2, r) % mod; 
}
int get(){
	xl = 0;
	ll ans = gm(0, 0, n), p = 1, k = 1;
	if(s.empty()){
		return ans;
	}
	auto i = --s.end();
	while(1){
		xl = *i;
		ll nx = gm(0, 0, n);
		if(p * k <= nx){
			ans = 1ll * nx * mlp(0, 0, n) % mod;
			k = nx;
		}
		p *= a[xl];
		if(p > inf)break;
		if(i == s.begin())break;
		--i;
	}
	xl = 0;
	ll nx = gm(0, 0, n);
	if(p * k < nx)ans = nx;
	return ans;
}
int init(int m, int x[], int y[]) {
	n = m;
	for(int i = 0; i < n; i++){
		a[i] = x[i], b[i] = y[i];
		it = i; 
		upd(0, 0, n);
		if(a[i] != 1)s.insert(i);
	}
	return get();
}
 
int updateX(int pos, int val) {	
	if(a[pos] == val)return get();
	if(a[pos] == 1)s.insert(pos);
	else if(val == 1)s.erase(pos);
	it = pos;
	a[it] = val;
	upd(0, 0, n);
	return get();
}
 
int updateY(int pos, int val) {
	it = pos;
	b[it] = val;
	upd(0, 0, n);
	return get();
}

Compilation message

horses.cpp: In function 'int get()':
horses.cpp:49:10: warning: conversion from '__int128' to 'int' may change value [-Wconversion]
   49 |   return ans;
      |          ^~~
horses.cpp:67:9: warning: conversion from '__int128' to 'int' may change value [-Wconversion]
   67 |  return ans;
      |         ^~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 0 ms 444 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 1 ms 348 KB Output is correct
14 Correct 0 ms 344 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 344 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 452 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 600 KB Output is correct
8 Correct 1 ms 344 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 452 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 0 ms 348 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
23 Correct 1 ms 604 KB Output is correct
24 Correct 1 ms 604 KB Output is correct
25 Correct 2 ms 604 KB Output is correct
26 Correct 1 ms 604 KB Output is correct
27 Correct 2 ms 348 KB Output is correct
28 Correct 2 ms 604 KB Output is correct
29 Correct 1 ms 348 KB Output is correct
30 Correct 1 ms 604 KB Output is correct
31 Correct 2 ms 348 KB Output is correct
32 Correct 2 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 532 ms 81096 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 392 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 1 ms 348 KB Output is correct
16 Correct 1 ms 600 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 1 ms 348 KB Output is correct
19 Correct 1 ms 348 KB Output is correct
20 Correct 1 ms 348 KB Output is correct
21 Correct 1 ms 432 KB Output is correct
22 Correct 0 ms 344 KB Output is correct
23 Correct 1 ms 460 KB Output is correct
24 Correct 1 ms 604 KB Output is correct
25 Correct 1 ms 604 KB Output is correct
26 Correct 1 ms 604 KB Output is correct
27 Correct 2 ms 604 KB Output is correct
28 Correct 1 ms 604 KB Output is correct
29 Correct 1 ms 348 KB Output is correct
30 Correct 1 ms 460 KB Output is correct
31 Correct 1 ms 348 KB Output is correct
32 Correct 2 ms 348 KB Output is correct
33 Correct 141 ms 56840 KB Output is correct
34 Correct 138 ms 57084 KB Output is correct
35 Correct 265 ms 87140 KB Output is correct
36 Correct 257 ms 87124 KB Output is correct
37 Correct 154 ms 55116 KB Output is correct
38 Correct 199 ms 67888 KB Output is correct
39 Correct 127 ms 54868 KB Output is correct
40 Correct 238 ms 82260 KB Output is correct
41 Correct 148 ms 54932 KB Output is correct
42 Correct 146 ms 54884 KB Output is correct
43 Correct 244 ms 82812 KB Output is correct
44 Correct 244 ms 82772 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 600 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 452 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 0 ms 348 KB Output is correct
14 Correct 0 ms 444 KB Output is correct
15 Correct 0 ms 348 KB Output is correct
16 Correct 1 ms 508 KB Output is correct
17 Correct 1 ms 344 KB Output is correct
18 Correct 0 ms 348 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 348 KB Output is correct
23 Correct 1 ms 604 KB Output is correct
24 Correct 1 ms 604 KB Output is correct
25 Correct 1 ms 636 KB Output is correct
26 Correct 1 ms 812 KB Output is correct
27 Correct 2 ms 600 KB Output is correct
28 Correct 1 ms 600 KB Output is correct
29 Correct 1 ms 348 KB Output is correct
30 Correct 2 ms 604 KB Output is correct
31 Correct 2 ms 348 KB Output is correct
32 Correct 2 ms 348 KB Output is correct
33 Incorrect 500 ms 80992 KB Output isn't correct
34 Halted 0 ms 0 KB -