Submission #579029

#TimeUsernameProblemLanguageResultExecution timeMemory
579029LucaIlieHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
0 / 100
1000 ms248308 KiB
#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 (stderr)

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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...