Submission #579029

# Submission time Handle Problem Language Result Execution time Memory
579029 2022-06-18T10:13:25 Z LucaIlie Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++17
0 / 100
1000 ms 248308 KB
#include <bits/stdc++.h>

#define MAX_N 1000000

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 )
            l = mid;
        else
            r = mid;
    }

    return v[l] < x ? v[l] : -x;
}

struct nod {
    int maxEffort, maxW;
};

vector <int> v[4 * MAX_N];
nod aint[4 * MAX_N];
nod ans;

void init( int nod, int l, int r ) {
    int mid, i, j;

    if ( l == r ) {
        aint[nod].maxEffort = 0;
        aint[nod].maxW = w[l];
        v[nod].push_back( w[l] );
        return;
    }

    mid = (l + r) / 2;
    init( nod * 2 + 1, l, mid );
    init( nod * 2 + 2, mid + 1, r );

    aint[nod].maxW = max( aint[nod * 2 + 1].maxW, aint[nod * 2 + 2].maxW );
    aint[nod].maxEffort = max( max( aint[nod * 2 + 1].maxEffort, aint[nod * 2 + 2].maxEffort ), aint[nod * 2 + 1].maxW + lower( v[nod * 2 + 2], aint[nod * 2 + 1].maxW ) );

    i = j = 0;
    while ( i < v[nod * 2 + 1].size() && j < v[nod * 2 + 2].size() ) {
        if ( v[nod * 2 + 1][i] < v[nod * 2 + 2][j] ) {
            v[nod].push_back( v[nod * 2 + 1][i] );
            i++;
        } else {
            v[nod].push_back( v[nod * 2 + 2][j] );
            j++;
        }
    }
    while ( i < v[nod * 2 + 1].size() ) {
        v[nod].push_back( v[nod * 2 + 1][i] );
        i++;
    }
    while ( j < v[nod * 2 + 2].size() ) {
        v[nod].push_back( v[nod * 2 + 2][j] );
        j++;
    }
}

void query( int nod, int l, int r, int lq, int rq ) {
    int mid;

    if ( nod == 0 )
        ans = { 0, 0 };

    if ( l > rq || r < lq )
        return;

    if ( lq <= l && r <= rq ) {
        ans.maxEffort = max( max( ans.maxEffort, aint[nod].maxEffort ), ans.maxW + lower( v[nod], ans.maxW ) );
        ans.maxW = max( ans.maxW, aint[nod].maxW );
        return;
    }

    mid = (l + r) / 2;
    query( nod * 2 + 1, l, mid, lq, rq );
    query( nod * 2 + 2, mid + 1, r, lq, rq );
}

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

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

    init( 0, 0, n - 1 );

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

        query( 0, 0, n - 1, l - 1, r - 1 );

        if ( ans.maxEffort > k )
            cout << "0\n";
        else
            cout << "1\n";
    }

    return 0;
}

Compilation message

sortbooks.cpp: In function 'void init(int, int, int)':
sortbooks.cpp:52:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |     while ( i < v[nod * 2 + 1].size() && j < v[nod * 2 + 2].size() ) {
      |             ~~^~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:52:44: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |     while ( i < v[nod * 2 + 1].size() && j < v[nod * 2 + 2].size() ) {
      |                                          ~~^~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:61:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |     while ( i < v[nod * 2 + 1].size() ) {
      |             ~~^~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:65:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |     while ( j < v[nod * 2 + 2].size() ) {
      |             ~~^~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 45 ms 94164 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 45 ms 94164 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1000 ms 248308 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 110 ms 109984 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 45 ms 94164 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 45 ms 94164 KB Output isn't correct
2 Halted 0 ms 0 KB -