제출 #218341

#제출 시각아이디문제언어결과실행 시간메모리
218341LawlietHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
1762 ms101304 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 1000010; const int INF = 1000000010; struct query { int L, K; int ind; query(int l, int k, int i) : L(l), K(k), ind(i) {} }; class SegmentTree { public: int getLeft(int node) { return 2*node; } int getRight(int node) { return 2*node + 1; } void update(int node, int l, int r, int i, int v) { if( i < l || r < i ) return; if( l == r ) { mx[node] = max( mx[node] , v ); return; } int m = ( l + r )/2; update( getLeft(node) , l , m , i , v ); update( getRight(node) , m + 1 , r , i , v ); mx[node] = max( mx[ getLeft(node) ] , mx[ getRight(node) ] ); } int query(int node, int l, int r, int i, int j) { if( j < l || r < i ) return 0; if( i <= l && r <= j ) return mx[node]; int m = ( l + r )/2; int maxLeft = query( getLeft(node) , l , m , i , j ); int maxRight = query( getRight(node) , m + 1 , r , i , j ); return max( maxLeft , maxRight ); } SegmentTree() { memset( mx , 0 , sizeof(mx) ); } private: int mx[4*MAXN]; }; int n, q; int v[MAXN]; bool ans[MAXN]; vector< int > s; vector< query > sweep[MAXN]; SegmentTree SEG; int main() { scanf("%d %d",&n,&q); v[0] = INF; s.push_back( 0 ); for(int i = 1 ; i <= n ; i++) scanf("%d",&v[i]); for(int i = 1 ; i <= q ; i++) { int L, R, k; scanf("%d %d %d",&L,&R,&k); sweep[R].push_back( query( L , k , i ) ); } for(int i = 1 ; i <= n ; i++) { while( v[ s.back() ] <= v[i] ) s.pop_back(); if( s.back() != 0 ) { int ind = s.back(); SEG.update( 1 , 1 , n , ind , v[ind] + v[i] ); } s.push_back( i ); while( !sweep[i].empty() ) { int curL = sweep[i].back().L; int curK = sweep[i].back().K; int curInd = sweep[i].back().ind; sweep[i].pop_back(); ans[curInd] = ( SEG.query( 1 , 1 , n , curL , i ) <= curK ); } } for(int i = 1 ; i <= q ; i++) { if( ans[i] ) printf("1\n"); else printf("0\n"); } }

컴파일 시 표준 에러 (stderr) 메시지

sortbooks.cpp: In function 'int main()':
sortbooks.cpp:76:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d %d",&n,&q);
  ~~~~~^~~~~~~~~~~~~~~
sortbooks.cpp:82:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&v[i]);
   ~~~~~^~~~~~~~~~~~
sortbooks.cpp:87:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d %d",&L,&R,&k);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~
#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...