답안 #641402

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
641402 2022-09-16T15:40:35 Z itnes Happiness (Balkan15_HAPPINESS) C++14
30 / 100
2000 ms 96140 KB
#include "happiness.h"
#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<ll,int> pli;
typedef pair<int,ll> pil;
typedef pair<int,int> pii;
const ll INFLL=1e18+7;
const int INF=1e9+7;
#define pb push_back
const int MAXN=1e6+7;
const ll nTree=(1LL<<42);
struct spr_tree{
	struct node{
		node *left_node=nullptr,*right_node=nullptr;
		ll val=0,lazy=0;
	};
	node *root=new node();
	void update(node *v,ll start,ll end,ll l,ll r,ll val){
		if(v->lazy!=0){
			v->val+=v->lazy;
			if(start!=end){
				if(v->left_node==nullptr) v->left_node=new node();
				v->left_node->lazy+=v->lazy;
				if(v->right_node==nullptr) v->right_node=new node();
				v->right_node->lazy+=v->lazy;
			}
			v->lazy=0;
		}
		if(start>r||end<l||start>end) return;
		if(start>=l&&end<=r){
			v->val+=val;
			if(start!=end){
				if(v->left_node==nullptr) v->left_node=new node();
				v->left_node->lazy+=val;
				if(v->right_node==nullptr) v->right_node=new node();
				v->right_node->lazy+=val;
			}
			return;
		}
		ll mid=(start+end)>>1;
		if(v->left_node==nullptr) v->left_node=new node();
		update(v->left_node,start,mid,l,r,val);
		if(v->right_node==nullptr) v->right_node=new node();
		update(v->right_node,mid+1,end,l,r,val);
		v->val=max(v->left_node->val,v->right_node->val);
	}
	ll query(node *v,ll start,ll end,ll l,ll r){
		if(start>r||end<l||start>end) return -INFLL;
		if(v->lazy!=0){
			v->val+=v->lazy;
			if(start!=end){
				if(v->left_node==nullptr) v->left_node=new node();
				v->left_node->lazy+=v->lazy;
				if(v->right_node==nullptr) v->right_node=new node();
				v->right_node->lazy+=v->lazy;
			}
			v->lazy=0;
		}
		if(start>=l&&end<=r) return v->val;
		ll mid=(start+end)>>1;
		if(v->left_node==nullptr) v->left_node=new node();
		if(v->right_node==nullptr) v->right_node=new node();
		return max(query(v->left_node,start,mid,l,r),query(v->right_node,mid+1,end,l,r));
	}
	void update(ll l,ll r,ll val){update(root,0,nTree-1,l,r,val);}
	ll query(ll l,ll r){return query(root,0,nTree-1,l,r);}
};
ll N;
map<ll,int> cnt;
spr_tree t;
bool init(int coinsCount,ll maxCoinSize,ll coins[]){
	N=maxCoinSize;
	for(int i=0;i<coinsCount;++i){
		++cnt[coins[i]];
		if(cnt[coins[i]]==1) t.update(coins[i],coins[i],coins[i]);
		t.update(coins[i]+1,N+1,-coins[i]);
	}
	return t.query(1,N+1)<=1;
}
bool is_happy(int event,int coinsCount,ll coins[]){
	for(int i=0;i<coinsCount;++i){
		if(event==1){
			++cnt[coins[i]];
			if(cnt[coins[i]]==1) t.update(coins[i],coins[i],coins[i]);
			t.update(coins[i]+1,N+1,-coins[i]);
		}else{
			--cnt[coins[i]];
			if(cnt[coins[i]]==0) t.update(coins[i],coins[i],-coins[i]);
			t.update(coins[i]+1,N+1,coins[i]);
		}
	}
	return t.query(1,N+1)<=1;
}
//~ int main()
//~ {
	//~ ios_base::sync_with_stdio(0);
	//~ cout<<init(5,100,{4,8,1,2,16})<<"\n";
	//~ cout<<is_happy(-1,2,{2,8})<<"\n";
	//~ cout<<is_happy(1,3,{7,9,2})<<"\n";
//~ }

Compilation message

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 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 12 ms 5976 KB Output is correct
7 Correct 9 ms 6612 KB Output is correct
8 Correct 91 ms 51240 KB Output is correct
9 Correct 89 ms 51748 KB Output is correct
10 Correct 97 ms 49980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1474 ms 79916 KB Output is correct
7 Correct 1339 ms 79208 KB Output is correct
8 Correct 1331 ms 79956 KB Output is correct
9 Execution timed out 2043 ms 96140 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 12 ms 5976 KB Output is correct
7 Correct 9 ms 6612 KB Output is correct
8 Correct 91 ms 51240 KB Output is correct
9 Correct 89 ms 51748 KB Output is correct
10 Correct 97 ms 49980 KB Output is correct
11 Correct 1474 ms 79916 KB Output is correct
12 Correct 1339 ms 79208 KB Output is correct
13 Correct 1331 ms 79956 KB Output is correct
14 Execution timed out 2043 ms 96140 KB Time limit exceeded
15 Halted 0 ms 0 KB -