답안 #526928

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
526928 2022-02-16T16:42:27 Z peuch Happiness (Balkan15_HAPPINESS) C++17
60 / 100
2000 ms 361132 KB
#include "happiness.h"
#include<bits/stdc++.h>
using namespace std;

long long m, sum;
vector<long long> seg, lzy;
vector<int> e, d;

map<long long, int> freq;

bool init(int coinsCount, long long maxCoinSize, long long coins[]);
bool is_happy(int event, int coinsCount, long long coins[]);
int create();
void refresh(int pos, long long ini, long long fim);
void update(int pos, long long ini, long long fim, long long p, long long q, long long val);

bool init(int coinsCount, long long maxCoinSize, long long coins[]) {
	m = maxCoinSize;
	create();
	create();
	return is_happy(1, coinsCount, coins);
}

bool is_happy(int event, int coinsCount, long long coins[]) {
	for(int i = 0; i < coinsCount; i++){
		freq[coins[i]] += event;
		if(event == 1 && freq[coins[i]] == 1) update(1, 1, m, coins[i], coins[i], 1 - coins[i]);
		if(event == -1 && freq[coins[i]] == 0) update(1, 1, m, coins[i], coins[i], coins[i] - 1);
		sum += event * coins[i];
		update(1, 1, m, coins[i] + 1, m, event * coins[i]);
	}
	return seg[1] >= 0;
}

int create(){
	seg.push_back(0);
	lzy.push_back(0);
	e.push_back(0);
	d.push_back(0);
	return seg.size() - 1;
}

void refresh(int pos, long long ini, long long fim){
	if(lzy[pos] == 0) return;
	if(pos == 0) return;
	seg[pos] += lzy[pos];
	if(ini != fim){
		long long mid = (ini + fim) >> 1;
		if(e[pos] == 0){
			int aux = create();
			e[pos] = aux;
		}
		if(d[pos] == 0){
			int aux = create();
			d[pos] = aux;
		}
		lzy[e[pos]] += lzy[pos];
		lzy[d[pos]] += lzy[pos];
	}
	lzy[pos] = 0;
}

void update(int pos, long long ini, long long fim, long long p, long long q, long long val){
	refresh(pos, ini, fim);
	if(ini > q || fim < p) return;
	if(ini >= p && fim <= q){
		lzy[pos] += val;
		refresh(pos, ini, fim);
		return;
	}
	long long mid = (ini + fim) >> 1;
	if(p <= mid){
		if(e[pos] == 0){
			int aux = create();
			e[pos] = aux;
		}
		update(e[pos], ini, mid, p, q, val);
	}
	if(q > mid){
		if(d[pos] == 0){
			int aux = create();
			d[pos] = aux;
		}
		update(d[pos], mid + 1, fim, p, q, val);
	}
	refresh(e[pos], ini, mid);
	refresh(d[pos], mid + 1, fim);
	if(e[pos] == 0) seg[pos] = min(seg[d[pos]], -mid);
	else if(d[pos] == 0) seg[pos] = min(seg[e[pos]], -fim);
	else seg[pos] = min(seg[e[pos]], seg[d[pos]]);
}

Compilation message

happiness.cpp: In function 'void refresh(int, long long int, long long int)':
happiness.cpp:48:13: warning: unused variable 'mid' [-Wunused-variable]
   48 |   long long mid = (ini + fim) >> 1;
      |             ^~~
grader.cpp: In function 'int main()':
grader.cpp:16:12: warning: unused variable 'max_code' [-Wunused-variable]
   16 |  long long max_code;
      |            ^~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 8 ms 4024 KB Output is correct
7 Correct 12 ms 5284 KB Output is correct
8 Correct 119 ms 40408 KB Output is correct
9 Correct 91 ms 40440 KB Output is correct
10 Correct 72 ms 32060 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 1160 ms 51292 KB Output is correct
7 Correct 1103 ms 51132 KB Output is correct
8 Correct 1094 ms 51232 KB Output is correct
9 Correct 1791 ms 58068 KB Output is correct
10 Correct 1813 ms 62120 KB Output is correct
11 Correct 628 ms 39996 KB Output is correct
12 Correct 632 ms 40044 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 8 ms 4024 KB Output is correct
7 Correct 12 ms 5284 KB Output is correct
8 Correct 119 ms 40408 KB Output is correct
9 Correct 91 ms 40440 KB Output is correct
10 Correct 72 ms 32060 KB Output is correct
11 Correct 1160 ms 51292 KB Output is correct
12 Correct 1103 ms 51132 KB Output is correct
13 Correct 1094 ms 51232 KB Output is correct
14 Correct 1791 ms 58068 KB Output is correct
15 Correct 1813 ms 62120 KB Output is correct
16 Correct 628 ms 39996 KB Output is correct
17 Correct 632 ms 40044 KB Output is correct
18 Execution timed out 2025 ms 361132 KB Time limit exceeded
19 Halted 0 ms 0 KB -