답안 #578481

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
578481 2022-06-17T04:33:29 Z amunduzbaev The Potion of Great Power (CEOI20_potion) C++17
56 / 100
3000 ms 121780 KB
#include "bits/stdc++.h"
using namespace std;
#ifndef EVAL
#include "grader.cpp"
#endif
 
#define ar array
const int N = 1e5 + 5;
const int C = 35;
vector<ar<int, 2>> edges[N];
vector<set<ar<int, 2>>> vals[N];
int h[N], n;

void init(int N, int D, int H[]) {
	n = N;
	for(int i=0;i<N;i++){
		h[i] = H[i];
	}
}

void curseChanges(int U, int A[], int B[]) {
	for(int i=0;i<U;i++){
		edges[A[i]].push_back({i + 1, B[i]});
		edges[B[i]].push_back({i + 1, A[i]});
	}
	
	for(int i=0;i<n;i++){
		set<ar<int, 2>> ss;
		for(int j=0;j<(int)edges[i].size();j++){
			if(j % C == 0){
				vals[i].push_back(ss);
			}
			
			if(ss.count({h[edges[i][j][1]], edges[i][j][1]})){
				ss.erase({h[edges[i][j][1]], edges[i][j][1]});
			} else {
				ss.insert({h[edges[i][j][1]], edges[i][j][1]});
			}
		}
	}
}

void get(int a, int t, set<ar<int, 2>>& res){
	int j = lower_bound(edges[a].begin(), edges[a].end(), (ar<int, 2>){t + 1, -1}) - edges[a].begin();
	if(!j) return;
	j--;
	
	res = vals[a][j/C];
	for(int k=(j/C) * C;k<(int)edges[a].size() && edges[a][k][0]<=t;k++){
		if(res.count({h[edges[a][k][1]], edges[a][k][1]})){
			res.erase({h[edges[a][k][1]], edges[a][k][1]});
		} else {
			res.insert({h[edges[a][k][1]], edges[a][k][1]});
		}
	}
	
	//~ for(auto x : res) cout<<x[0]<<" ";
	//~ cout<<"\n";
	
	return;
}

set<ar<int, 2>> a, b;
int question(int x, int y, int v) {
	a.clear(), b.clear();
	get(x, v, a), get(y, v, b);
	
	auto lx = a.begin(), rx = b.begin();
	int last = -1e9, f = -1, res = 1e9;
	while(lx != a.end() || rx != b.end()){
		if(f == 0 && rx != b.end()) res = min(res, (*rx)[0] - last);
		if(f == 1 && lx != a.end()) res = min(res, (*lx)[0] - last);
		if(lx != a.end() && rx != b.end()){
			if(*lx <= *rx) last = (*lx)[0], f = 0, lx++;
			else last = (*rx)[0], f = 1, rx++;
		} else break;
	}
	
	return res;
}
 
/*
 
6 5 11 4
2 42 1000 54 68 234
0 1
2 0
3 4
3 5
3 5
1 3
5 3
0 5
3 0
1 3
3 5
0 3 4 26 
3 0 8 0
0 5 5 1000000000
3 0 11 14
 
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4944 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 5072 KB Output is correct
2 Correct 4 ms 5072 KB Output is correct
3 Correct 4 ms 5072 KB Output is correct
4 Correct 25 ms 5904 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 237 ms 19416 KB Output is correct
2 Correct 230 ms 19440 KB Output is correct
3 Correct 368 ms 16328 KB Output is correct
4 Correct 1937 ms 78432 KB Output is correct
5 Correct 586 ms 24800 KB Output is correct
6 Execution timed out 3076 ms 114276 KB Time limit exceeded
7 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 214 ms 19484 KB Output is correct
2 Correct 2601 ms 121780 KB Output is correct
3 Correct 1726 ms 66168 KB Output is correct
4 Correct 2773 ms 113800 KB Output is correct
5 Correct 383 ms 25112 KB Output is correct
6 Correct 2972 ms 114096 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 61 ms 5968 KB Output is correct
2 Correct 220 ms 5584 KB Output is correct
3 Correct 366 ms 5656 KB Output is correct
4 Correct 1057 ms 7632 KB Output is correct
5 Correct 962 ms 7348 KB Output is correct
6 Correct 219 ms 5344 KB Output is correct
7 Correct 912 ms 6980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 4944 KB Output is correct
2 Correct 4 ms 5072 KB Output is correct
3 Correct 4 ms 5072 KB Output is correct
4 Correct 4 ms 5072 KB Output is correct
5 Correct 25 ms 5904 KB Output is correct
6 Correct 237 ms 19416 KB Output is correct
7 Correct 230 ms 19440 KB Output is correct
8 Correct 368 ms 16328 KB Output is correct
9 Correct 1937 ms 78432 KB Output is correct
10 Correct 586 ms 24800 KB Output is correct
11 Execution timed out 3076 ms 114276 KB Time limit exceeded
12 Halted 0 ms 0 KB -