# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1271897 | mfong_123abc | Happiness (Balkan15_HAPPINESS) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
#define int long long
#include "happiness.h"
int n,m,q,e,k,a[1021000]={0},t[4021000]={0},sum=0,b[10];
void build(int v, int l, int r){
if(l==r){ t[v]=a[l]; return; }
int mid=(l+r)/2;
build(v*2,l,mid); build(v*2+1,mid+1,r);
t[v]=t[v*2]+t[v*2+1];
// cout<<v<<" "<<l<<" "<<r<<" "<<t[v]<<" "<<t[v*2]<<" "<<t[v*2+1]<<"\n";
}
int query(int v, int l, int r, int tl, int tr){
if(l>tr||r<tl)return 0;
if(tl<=l&&tr>=r)return t[v];
int mid=(l+r)/2;
// cout<<v<<" "<<l<<" "<<r<<" "<<t[v]<<"\n";
return query(v*2,l,mid,tl,tr)+query(v*2+1,mid+1,r,tl,tr);
}
void update(int v, int l, int r, int pos, int val){
// cout<<v<<" "<<l<<" "<<r<<" "<<pos<<" "<<val<<"\n";
if(pos<l||pos>r)return;
if(l==r){
t[v]+=val;
return;
}
int mid=(l+r)/2;
update(v*2,l,mid,pos,val); update(v*2+1,mid+1,r,pos,val);
t[v]=t[v*2]+t[v*2+1];
}
bool check(){
int w=1;
while(w<=sum){
int res=query(1,1,m,1,w);
// cout<<w<<" "<<res<<"\n";
if(res<w)return false;
w=res+1;
}
return true;
}
bool init(int coinsCount, long long maxCoinSize, long long coins[]) {
n=coinsCount; m=maxCoinSize; for(int i=1;i<=n;i++){int v=coins[i-1]; cin>>v; a[v]+=v; sum+=v; }
build(1,1,m);
return check();
}
bool is_happy(int event, int coinsCount, long long coins[]) {
e=event; k=coinsCount; for(int i=1;i<=k;i++)b[i]=coins[i-1];
for(int i=1;i<=k;i++)cin>>b[i];
for(int i=1;i<=k;i++)sum+=e*b[i];
for(int i=1;i<=k;i++)update(1,1,m,b[i],e*b[i]);
return check();
}
// signed main(){
// cin>>n>>m;
// for(int i=1;i<=n;i++){int v; cin>>v; a[v]+=v; sum+=v; }
// cin>>q;
// build(1,1,m);
// cout<<check()<<"\n";
// while(q--){
// cin>>e>>k;
// for(int i=1;i<=k;i++)cin>>b[i];
// for(int i=1;i<=k;i++)sum+=e*b[i];
// for(int i=1;i<=k;i++)update(1,1,m,b[i],e*b[i]);
// cout<<check()<<"\n";
// }
// }