제출 #538360

#제출 시각아이디문제언어결과실행 시간메모리
538360fcwHappiness (Balkan15_HAPPINESS)C++17
100 / 100
1850 ms395380 KiB
#include "happiness.h"
#include <bits/stdc++.h>
using namespace std;

using lint = long long;
lint LIM = 1e12 + 10;

struct node{
	lint sum, lz;
	int l, r;
	node(): sum(0), lz(0), l(0), r(0) {}
};

vector<node>seg;

int create(){
	seg.push_back(node());
	return seg.size() - 1;
}

void push(int v, lint l, lint r){
}

void update(int v, lint l, lint r, lint a, lint b, lint val){
	if(b < l || r < a) return;
	push(v, l, r);
	if(a <= l && r <= b){
		seg[v].sum += val;
		push(v, l, r);
		return;
	}
	lint m = (l + r) >> 1;
	if(!seg[v].l){
		int aux = create();
		seg[v].l = aux;
	}
	if(!seg[v].r){
		int aux = create();
		seg[v].r = aux;
	}
	update(seg[v].l, l, m, a, b, val);
	update(seg[v].r, m+1, r, a, b, val);
	push(seg[v].l, l, m);
	push(seg[v].r, m+1, r);
	seg[v].sum = seg[seg[v].l].sum + seg[seg[v].r].sum;
}

lint query(int v, lint l, lint r, lint a, lint b){
	if(b < l || r < a) return 0;
	if(v == 0) return 0;
	push(v, l, r);
	if(a <= l && r <= b){
		return seg[v].sum;
	}
	lint m = (l + r) >> 1;
	return query(seg[v].l, l, m, a, b) + query(seg[v].r, m+1, r, a, b);
}

bool check(){
	lint cur = 0, sum = seg[1].sum;
	while(cur < sum){
		lint cnt = query(1, 1, LIM, 1, cur);
		if(cnt < cur) return 0;
		cur = cnt + 1;
	}
	return 1;
}

bool init(int coinsCount, lint maxCoinSize, lint coins[]) {
	create();
	create();
	for(int i=0;i<coinsCount;i++){
		update(1, 1, LIM, coins[i], coins[i], coins[i]);
	}
	return check();
}

bool is_happy(int event, int coinsCount, lint coins[]) {
	for(int i=0;i<coinsCount;i++){
		update(1, 1, LIM, coins[i], coins[i], coins[i] * event);
	}
	return check();
}

컴파일 시 표준 에러 (stderr) 메시지

grader.cpp: In function 'int main()':
grader.cpp:16:12: warning: unused variable 'max_code' [-Wunused-variable]
   16 |  long long max_code;
      |            ^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...