답안 #1022791

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1022791 2024-07-14T05:20:15 Z socpite 코끼리 (Dancing Elephants) (IOI11_elephants) C++14
97 / 100
9000 ms 32760 KB
#include "elephants.h"
#include<bits/stdc++.h>
using namespace std;

const int blsz = 400;
const int maxn = 2e5+5;
const int INF = 2e9+5;

int sp[18][maxn];
multiset<int> current;
unordered_map<int, int> vmap;
multiset<int> changed;

int A[maxn];
int dval[maxn];

int n, l;

void build_sp(){

	changed = {INF};
	vmap.clear();
	int crr = 0;
	for(auto v: current)if(!crr || dval[crr-1] != v){
		vmap[v] = crr;
		dval[crr++] = v;
	}
	for(int i = 0; i < crr-1; i++){
		sp[0][i] = upper_bound(dval, dval + crr, dval[i] + l) - dval;
	}
	sp[0][crr-1] = crr-1;
	for(int i = 1; i < 18; i++){
		for(int j = 0; j < crr; j++)sp[i][j] = sp[i-1][sp[i-1][j]];
	}
}

void init(int N, int L, int X[])
{
  	n = N;
	l = L;
	current.insert(INF);
	for(int i = 0; i < N; i++){
		A[i] = X[i];
		current.insert(A[i]);
	}
	build_sp();
}

int update(int i, int y)
{
	current.erase(current.find(A[i]));
	changed.insert(A[i]);
	A[i] = y;
	current.insert(A[i]);
	changed.insert(A[i]);

	int realcnt = 0, ans = 0;
	int pos = *current.begin();
	while(pos != INF){
		realcnt++;
		if(changed.find(pos) != changed.end()){
			if(current.find(pos) == current.end())pos = *current.upper_bound(pos);
			else {
				ans++;
				pos = *current.upper_bound(pos + l);
			}
		}
		else {
			int nxt_change = *changed.upper_bound(pos);
			int id = vmap[pos];
			for(int i = 17; i >= 0; i--){
				if(dval[sp[i][id]] < nxt_change){
					id = sp[i][id];
					ans += (1<<i);
				}
			}
			pos = *current.upper_bound(dval[id] + l);
			ans++;
		}
	}
	if(realcnt >= blsz)build_sp();
	return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 1 ms 448 KB Output is correct
5 Correct 1 ms 604 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 1 ms 448 KB Output is correct
5 Correct 1 ms 604 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 515 ms 4188 KB Output is correct
8 Correct 575 ms 5188 KB Output is correct
9 Correct 2244 ms 11448 KB Output is correct
10 Correct 1131 ms 14888 KB Output is correct
11 Correct 939 ms 11092 KB Output is correct
12 Correct 4132 ms 11284 KB Output is correct
13 Correct 3343 ms 14684 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 1 ms 448 KB Output is correct
5 Correct 1 ms 604 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 515 ms 4188 KB Output is correct
8 Correct 575 ms 5188 KB Output is correct
9 Correct 2244 ms 11448 KB Output is correct
10 Correct 1131 ms 14888 KB Output is correct
11 Correct 939 ms 11092 KB Output is correct
12 Correct 4132 ms 11284 KB Output is correct
13 Correct 3343 ms 14684 KB Output is correct
14 Correct 1695 ms 7512 KB Output is correct
15 Correct 942 ms 6836 KB Output is correct
16 Correct 5967 ms 11900 KB Output is correct
17 Correct 8607 ms 15316 KB Output is correct
18 Correct 8354 ms 15256 KB Output is correct
19 Correct 2760 ms 15456 KB Output is correct
20 Correct 7676 ms 15316 KB Output is correct
21 Correct 8348 ms 15200 KB Output is correct
22 Correct 5107 ms 18592 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 1 ms 448 KB Output is correct
5 Correct 1 ms 604 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 515 ms 4188 KB Output is correct
8 Correct 575 ms 5188 KB Output is correct
9 Correct 2244 ms 11448 KB Output is correct
10 Correct 1131 ms 14888 KB Output is correct
11 Correct 939 ms 11092 KB Output is correct
12 Correct 4132 ms 11284 KB Output is correct
13 Correct 3343 ms 14684 KB Output is correct
14 Correct 1695 ms 7512 KB Output is correct
15 Correct 942 ms 6836 KB Output is correct
16 Correct 5967 ms 11900 KB Output is correct
17 Correct 8607 ms 15316 KB Output is correct
18 Correct 8354 ms 15256 KB Output is correct
19 Correct 2760 ms 15456 KB Output is correct
20 Correct 7676 ms 15316 KB Output is correct
21 Correct 8348 ms 15200 KB Output is correct
22 Correct 5107 ms 18592 KB Output is correct
23 Execution timed out 9024 ms 32760 KB Time limit exceeded
24 Halted 0 ms 0 KB -