제출 #641418

#제출 시각아이디문제언어결과실행 시간메모리
641418itnesHappiness (Balkan15_HAPPINESS)C++14
30 / 100
1800 ms103072 KiB
#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=2e5+7; const ll nTree=(1LL<<40); 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(l<=mid||v->left_node!=nullptr){ if(v->left_node==nullptr) v->left_node=new node(); update(v->left_node,start,mid,l,r,val); } if(r>mid||v->right_node!=nullptr){ 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==nullptr?-INFLL:v->left_node->val),(v->right_node==nullptr?-INFLL: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; ll val1=-INFLL,val2=-INFLL; if(l<=mid) val1=query(v->left_node,start,mid,l,r); if(r>mid) val2=query(v->right_node,mid+1,end,l,r); return max(val1,val2); } 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"; //~ }

컴파일 시 표준 에러 (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...