답안 #753645

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
753645 2023-06-05T15:46:49 Z LucaIlie Happiness (Balkan15_HAPPINESS) C++17
0 / 100
1 ms 212 KB
#include "happiness.h"
#include <bits/stdc++.h>

using namespace std;

int m;
unordered_map<long long, int> frecv;

struct SegTree {
    struct node {
        node *left, *right;
        long long minn, lazy;
    };

    node *createNode() {
        node *x = new node;
        x->left = x->right = NULL;
        x->minn = x->lazy = 0;
        return x;
    }

    node *root;

    void propag( node *v, long long l, long long r ) {
        v->minn += v->lazy;
        if ( l != r ) {
            v->left->lazy += v->lazy;
            v->right->lazy += v->lazy;
        }
        v->lazy = 0;
    }

    void init() {
        root = createNode();
    }

    void update( node *v, long long l, long long r, long long lu, long long ru, long long x ) {
        if ( l != r ) {
            if ( v->left == NULL )
                v->left = createNode();
            if ( v->right == NULL )
                v->right = createNode();
        }

        propag( v, l, r );

        if ( lu > r || ru < l )
            return;

        if ( lu <= l && r <= ru ) {
            v->lazy += x;
            propag( v, l, r );
            return;
        }

        long long mid = (l + r) / 2;
        update( v->left, l, mid, lu, ru, x );
        update( v->right, mid + 1, r, lu, ru, x );
        v->minn = min( v->left->minn, v->right->minn );
    }
    void update( long long l, long long r, long long x ) {
        update( root, 1, m, l, r, x );
    }

    long long queryALL() {
        return root->minn;
    }
};

SegTree aint;

void update( int e, long long x ) {
    frecv[x]++;
    aint.update( x, m, 2 * x * e );
  	if ( x > 1 )
    aint.update( max( 1LL, x - 1 ), m, -x * e );
}

bool init( int n, long long _m, long long c[] ) {
    m = _m;
    aint.init();
    for ( int i = 0; i < n; i++ )
        update( 1, c[i] );
    return (frecv[1] >= 1 && aint.queryALL() >= -1);
}

bool is_happy( int event, int n, long long c[] ) {
    for ( int i = 0; i < n; i++ )
        update( event, c[i] );
    return (frecv[1] >= 1 && aint.queryALL() >= -1);
}

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 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -