답안 #923048

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
923048 2024-02-06T13:35:41 Z oblantis 말 (IOI15_horses) C++17
57 / 100
474 ms 87376 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 = 2e9;
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 || p * k > inf)break;
		if(i == s.begin())break;
		--i;
	}
	xl = 0;
	ll nx = gm(0, 0, n);
	if(p <= nx && 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;
      |         ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 2 ms 2396 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 1 ms 344 KB Output is correct
10 Correct 0 ms 344 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 1 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 2396 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
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 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 344 KB Output is correct
6 Correct 1 ms 348 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 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 1 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 344 KB Output is correct
15 Correct 1 ms 2396 KB Output is correct
16 Correct 0 ms 344 KB Output is correct
17 Correct 0 ms 348 KB Output is correct
18 Correct 2 ms 2396 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 1 ms 2396 KB Output is correct
21 Correct 1 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 2 ms 600 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 604 KB Output is correct
28 Correct 3 ms 2652 KB Output is correct
29 Correct 2 ms 2396 KB Output is correct
30 Correct 1 ms 600 KB Output is correct
31 Correct 1 ms 348 KB Output is correct
32 Correct 2 ms 460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 474 ms 80724 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2396 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 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 348 KB Output is correct
9 Correct 1 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 2496 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 344 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 2 ms 1016 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 856 KB Output is correct
27 Correct 2 ms 760 KB Output is correct
28 Correct 2 ms 600 KB Output is correct
29 Correct 1 ms 2396 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
33 Correct 144 ms 56796 KB Output is correct
34 Correct 143 ms 56796 KB Output is correct
35 Correct 261 ms 87376 KB Output is correct
36 Correct 265 ms 87168 KB Output is correct
37 Correct 150 ms 55040 KB Output is correct
38 Correct 187 ms 67832 KB Output is correct
39 Correct 127 ms 54864 KB Output is correct
40 Correct 246 ms 82436 KB Output is correct
41 Correct 139 ms 54868 KB Output is correct
42 Correct 146 ms 54868 KB Output is correct
43 Correct 229 ms 82640 KB Output is correct
44 Correct 233 ms 82708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 360 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 1 ms 2648 KB Output is correct
8 Correct 1 ms 2396 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 0 ms 344 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 1 ms 348 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 0 ms 344 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 604 KB Output is correct
28 Correct 1 ms 604 KB Output is correct
29 Correct 1 ms 2396 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
33 Incorrect 466 ms 81216 KB Output isn't correct
34 Halted 0 ms 0 KB -