답안 #887610

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
887610 2023-12-14T20:19:06 Z MarwenElarbi Happiness (Balkan15_HAPPINESS) C++17
60 / 100
2000 ms 524288 KB
#include <bits/stdc++.h>
//#include "happiness.h"
#include <stdio.h>
#include <stdlib.h>

#define NMAX 200000
#define QMAX 100000

static int N, Q;
static long long M;
static long long coins[NMAX], A[5];
using namespace std;
struct Node{
    int64_t lazy, ans, l, r, cnt, tl, tr;
    Node(): lazy(0), ans(0), l(-1), r(-1), cnt(0) {}
};
Node segtree[123456*64];
int cnt=0;
void push_down(int pos){
    long long mid=(segtree[pos].tl+segtree[pos].tr)/2;
    if(segtree[pos].l==-1){
        segtree[pos].l=++cnt;
        segtree[segtree[pos].l].tl=segtree[pos].tl;
        segtree[segtree[pos].l].tr=mid;
    }
    if(segtree[pos].r==-1){
        segtree[pos].r=++cnt;
        segtree[segtree[pos].r].tl=mid+1;
        segtree[segtree[pos].r].tr=segtree[pos].tr;
    }
    return;
}
void expand(int pos){
    if(segtree[pos].lazy!=0){
        push_down(pos);
        segtree[segtree[pos].l].ans+=segtree[pos].lazy;
        segtree[segtree[pos].r].ans+=segtree[pos].lazy;
        segtree[segtree[pos].l].lazy+=segtree[pos].lazy;
        segtree[segtree[pos].r].lazy+=segtree[pos].lazy;
        segtree[pos].lazy=0;
    }
}
void update(int pos,long long left,long long right,long long value)
{
    expand(pos);
    if(left==segtree[pos].tl&&right==segtree[pos].tr){
        //cout<<segtree[pos].tl<<" "<<segtree[pos].tr<<" "<<value<<endl;
        segtree[pos].lazy+=value;
        segtree[pos].ans+=value;
        expand(pos);
        return;
    }
    long long mid=(segtree[pos].tl+segtree[pos].tr)/2;
    push_down(pos);
    if(left>mid) update(segtree[pos].r,left,right,value);
    else if(right<=mid) update(segtree[pos].l,left,right,value);
    else{
        update(segtree[pos].l,left,mid,value);
        update(segtree[pos].r,mid+1,right,value);
    }
    segtree[pos].ans=min(segtree[segtree[pos].l].ans,segtree[segtree[pos].r].ans);
    return;
}
void query(int pos,long long index,int event){
    //cout <<segtree[pos].tl<<" "<<segtree[pos].tr<<endl;
    expand(pos);
    if(segtree[pos].tl==segtree[pos].tr){
        if(event==1){
            if(segtree[pos].cnt==0) segtree[pos].ans-=index;
            segtree[pos].cnt++;
        }else{
            segtree[pos].cnt--;
            if(segtree[pos].cnt==0) segtree[pos].ans+=index;
        }
        //cout <<segtree[pos].tl<<" "<<segtree[pos].sum<<" "<<segtree[pos].ans<<endl;
        return;
    }
    push_down(pos);
    long long mid=(segtree[pos].tl+segtree[pos].tr)/2;
    if(index<=mid) query(segtree[pos].l,index,event);
    else query(segtree[pos].r,index,event);
    segtree[pos].ans=min(segtree[segtree[pos].l].ans,segtree[segtree[pos].r].ans);
    return;
}
long long mx;
bool init(int coinsCount, long long maxCoinSize, long long coins[]){
    sort(coins,coins+coinsCount);
    segtree[0].tl=0;
    segtree[0].tr=maxCoinSize;
    mx=maxCoinSize;
    update(0,0,mx,1);
    for (int i = 0; i < coinsCount; ++i)
    {
        query(0,coins[i],1);
        update(0,coins[i]+1,maxCoinSize,coins[i]);
    }//cout <<endl;
    
    return segtree[0].ans>=0;
}
bool is_happy(int event, int coinsCount, long long coins[]){
    sort(coins,coins+coinsCount);
    for (int i = 0; i < coinsCount; ++i)
    {
        query(0,coins[i],event);
        if(event==-1) update(0,coins[i]+1,mx,-coins[i]);
        else update(0,coins[i]+1,mx,coins[i]);
        //cout <<segtree[0].ans<<endl;
        //cout <<segtree[0].sum<<" ";
    }
    return segtree[0].ans>=0;
}

Compilation message

happiness.cpp:11:31: warning: 'A' defined but not used [-Wunused-variable]
   11 | static long long coins[NMAX], A[5];
      |                               ^
happiness.cpp:11:18: warning: 'coins' defined but not used [-Wunused-variable]
   11 | static long long coins[NMAX], A[5];
      |                  ^~~~~
happiness.cpp:10:18: warning: 'M' defined but not used [-Wunused-variable]
   10 | static long long M;
      |                  ^
happiness.cpp:9:15: warning: 'Q' defined but not used [-Wunused-variable]
    9 | static int N, Q;
      |               ^
happiness.cpp:9:12: warning: 'N' defined but not used [-Wunused-variable]
    9 | static int N, Q;
      |            ^
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 56 ms 433552 KB Output is correct
2 Correct 53 ms 433492 KB Output is correct
3 Correct 53 ms 433484 KB Output is correct
4 Correct 54 ms 433492 KB Output is correct
5 Correct 56 ms 433484 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 56 ms 433552 KB Output is correct
2 Correct 53 ms 433492 KB Output is correct
3 Correct 53 ms 433484 KB Output is correct
4 Correct 54 ms 433492 KB Output is correct
5 Correct 56 ms 433484 KB Output is correct
6 Correct 56 ms 433492 KB Output is correct
7 Correct 55 ms 433408 KB Output is correct
8 Correct 81 ms 433492 KB Output is correct
9 Correct 84 ms 434048 KB Output is correct
10 Correct 76 ms 433544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 56 ms 433552 KB Output is correct
2 Correct 53 ms 433492 KB Output is correct
3 Correct 53 ms 433484 KB Output is correct
4 Correct 54 ms 433492 KB Output is correct
5 Correct 56 ms 433484 KB Output is correct
6 Correct 505 ms 434260 KB Output is correct
7 Correct 471 ms 434256 KB Output is correct
8 Correct 483 ms 434500 KB Output is correct
9 Correct 792 ms 434684 KB Output is correct
10 Correct 791 ms 434260 KB Output is correct
11 Correct 353 ms 433752 KB Output is correct
12 Correct 359 ms 434004 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 56 ms 433552 KB Output is correct
2 Correct 53 ms 433492 KB Output is correct
3 Correct 53 ms 433484 KB Output is correct
4 Correct 54 ms 433492 KB Output is correct
5 Correct 56 ms 433484 KB Output is correct
6 Correct 56 ms 433492 KB Output is correct
7 Correct 55 ms 433408 KB Output is correct
8 Correct 81 ms 433492 KB Output is correct
9 Correct 84 ms 434048 KB Output is correct
10 Correct 76 ms 433544 KB Output is correct
11 Correct 505 ms 434260 KB Output is correct
12 Correct 471 ms 434256 KB Output is correct
13 Correct 483 ms 434500 KB Output is correct
14 Correct 792 ms 434684 KB Output is correct
15 Correct 791 ms 434260 KB Output is correct
16 Correct 353 ms 433752 KB Output is correct
17 Correct 359 ms 434004 KB Output is correct
18 Execution timed out 2764 ms 524288 KB Time limit exceeded
19 Halted 0 ms 0 KB -