답안 #521790

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
521790 2022-02-03T07:05:31 Z LucaIlie Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++17
0 / 100
3 ms 1996 KB
#include <bits/stdc++.h>

#define MAX_N 1000
#define MAX_LOG_N 19
#define int long long

using namespace std;

int w[MAX_N];

int lower( vector <int> v, int x ) {
    int l, r, mid;

    l = 0;
    r = v.size();
    while ( r - l > 1 ) {
        mid = (l + r) / 2;

        if ( v[mid] > x )
            r = mid;
        else
            l = mid;
    }

    return v[l] <= x ? v[l] : 0;
}

struct sparseTable {
    struct nod {
        int maxW, maxEfort;
        vector <int> v;
    };

    int n;
    nod table[MAX_N][MAX_LOG_N + 1];

    void init( int v[], int m ) {
        int i, p, i1, i2;

        n = m;

        for ( i = 0; i < n; i++ ) {
            table[i][0].maxW = v[i];
            table[i][0].maxEfort = 0;
            table[i][0].v.push_back( v[i] );
        }
        for ( p = 1; (1 << p) <= n; p++ ) {
            for ( i = 0; i <= n - (1 << p); i++ ) {
                table[i][p].maxW = max( table[i][p - 1].maxW, table[i + (1 << (p - 1))][p - 1].maxW );
                table[i][p].maxEfort = max( max( table[i][p - 1].maxEfort, table[i + (1 << (p - 1))][p - 1].maxEfort ), table[i][p - 1].maxW + lower( table[i + (1 << (p - 1))][p - 1].v, table[i][p - 1].maxW ) );

                i1 = i2 = 0;
                while ( i1 < table[i][p - 1].v.size() && i2 < table[i + (1 << (p - 1))][p - 1].v.size() ) {
                    if ( table[i][p - 1].v[i1] < table[i + (1 << (p - 1))][p - 1].v[i2] ) {
                        table[i][p].v.push_back( table[i][p - 1].v[i] );
                        i1++;
                    } else {
                        table[i][p].v.push_back( table[i + (1 << (p - 1))][p - 1].v[i2] );
                        i2++;
                    }
                }
                while ( i1 < table[i][p - 1].v.size() ) {
                    table[i][p].v.push_back( table[i][p - 1].v[i1] );
                    i1++;
                }
                while ( i2 < table[i + (1 << (p - 1))][p - 1].v.size() ) {
                    table[i][p].v.push_back( table[i + (1 << (p - 1))][p - 1].v[i2] );
                    i2++;
                }
            }
        }
    }

    int query( int l, int r ) {
        int len, e, mW, p;

        len = r - l + 1;

        e = 0;
        mW = 0;
        for ( p = 0; (1 << p) <= len; p++ ) {
            if ( len & (1 << p) ) {
                e = max( max( e, table[l][p].maxEfort ), mW + lower( table[l][p].v, mW ) );
                mW = max( mW, table[l][p].maxW );
                l += (1 << p);
            }
        }

        return e;
    }
};

sparseTable shelf;

signed main() {
    int n, m, l, r, k, i;

    cin >> n >> m;
    for ( i = 0; i < n; i++ )
        cin >> w[i];

    shelf.init( w, n );

    for ( i = 0; i < m; i++ ) {
        cin >> l >> r >> k;

        if ( shelf.query( l - 1, r - 1 ) > k )
            cout << "0\n";
        else
            cout << "1\n";
    }

    return 0;
}

Compilation message

sortbooks.cpp: In member function 'void sparseTable::init(long long int*, long long int)':
sortbooks.cpp:53:28: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |                 while ( i1 < table[i][p - 1].v.size() && i2 < table[i + (1 << (p - 1))][p - 1].v.size() ) {
      |                         ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:53:61: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |                 while ( i1 < table[i][p - 1].v.size() && i2 < table[i + (1 << (p - 1))][p - 1].v.size() ) {
      |                                                          ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:62:28: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |                 while ( i1 < table[i][p - 1].v.size() ) {
      |                         ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:66:28: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |                 while ( i2 < table[i + (1 << (p - 1))][p - 1].v.size() ) {
      |                         ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 972 KB Output is correct
2 Correct 1 ms 972 KB Output is correct
3 Incorrect 2 ms 1100 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 972 KB Output is correct
2 Correct 1 ms 972 KB Output is correct
3 Incorrect 2 ms 1100 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 1996 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2 ms 1996 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 972 KB Output is correct
2 Correct 1 ms 972 KB Output is correct
3 Incorrect 2 ms 1100 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 972 KB Output is correct
2 Correct 1 ms 972 KB Output is correct
3 Incorrect 2 ms 1100 KB Output isn't correct
4 Halted 0 ms 0 KB -