제출 #536580

#제출 시각아이디문제언어결과실행 시간메모리
536580cig32Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
64 / 100
829 ms262144 KiB
#include "bits/stdc++.h" using namespace std; const int MAXN = 1e6 + 10; const int MOD = 1e9 + 7; mt19937_64 rng((int)std::chrono::steady_clock::now().time_since_epoch().count()); int rnd(int x, int y) { int u = uniform_int_distribution<int>(x, y)(rng); return u; } struct node { int ans; // maximum sum inversion in range vector<int> v; // SORTED!!! crazy memory moment } st[2500000]; int n, m; vector<int> v[MAXN]; void bu(int l, int r, int idx) { v[l].push_back(idx); st[idx].v.resize(r-l+1); if(l == r) { int w; cin >> w; st[idx].v[0] = w; st[idx].ans = -1; return; } int mid = (l + r) >> 1; bu(l, mid, 2*idx + 1); bu(mid+1, r, 2*idx + 2); int lptr = 0, rptr = 0; int nxt = 0; while(!(lptr == st[2*idx + 1].v.size() && rptr == st[2*idx + 2].v.size())) { if(lptr == st[2*idx+1].v.size()) { st[idx].v[nxt] = st[2*idx+2].v[rptr]; rptr++; nxt++; } else if(rptr == st[2*idx+2].v.size()) { st[idx].v[nxt] = st[2*idx+1].v[lptr]; lptr++; nxt++; } else { if(st[2*idx+1].v[lptr] < st[2*idx+2].v[rptr]) { st[idx].v[nxt] = st[2*idx+1].v[lptr]; lptr++; nxt++; } else { st[idx].v[nxt] = st[2*idx+2].v[rptr]; rptr++; nxt++; } } } st[idx].ans = max(st[2*idx+1].ans, st[2*idx+2].ans); int ma = st[2*idx+1].v[st[2*idx+1].v.size() - 1]; int lb = 0, rb = st[2*idx+2].v.size() - 1; while(lb < rb) { int mid = (lb + rb + 1) >> 1; if(st[2*idx+2].v[mid] < ma) lb = mid; else rb = mid - 1; } if(st[2*idx+2].v[lb] < ma) { st[idx].ans = max(st[idx].ans, st[2*idx+2].v[lb] + ma); } } void build() { bu(1, n, 0); } int calc(int idx1) { return st[idx1].v.size() - 1; } bool cmp(int a, int b) { return calc(a) < calc(b); } void solve(int tc) { cin >> n >> m; build(); for(int i=1; i<=n; i++) sort(v[i].begin(), v[i].end(), cmp); for(int i=0; i<m; i++) { int l, r, k; cin >> l >> r >> k; int ma = -2e9; int ans = -2e9; while(l <= r) { int lb = 0, rb = v[l].size() - 1; while(lb < rb) { int mid = (lb + rb + 1) >> 1; int idx1 = v[l][mid]; int range = l + st[idx1].v.size() - 1; if(range <= r) lb = mid; else rb = mid - 1; } int idx = v[l][lb]; ans = max(ans, st[idx].ans); int lb2 = 0, rb2 = st[idx].v.size() - 1; while(lb2 < rb2) { int mid = (lb2 + rb2 + 1) >> 1; if(st[idx].v[mid] < ma) lb2 = mid; else rb2 = mid - 1; } if(st[idx].v[lb2] < ma) ans = max(ans, ma + st[idx].v[lb2]); ma = max(ma, st[idx].v[st[idx].v.size() - 1]); int idx1 = v[l][lb]; int range = l + st[idx1].v.size() - 1; l = range + 1; } cout << (ans > k ? "0\n" : "1\n"); } } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); int t = 1; //cin >> t; for(int i=1; i<=t; i++) solve(i); }

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

sortbooks.cpp: In function 'void bu(int, int, int)':
sortbooks.cpp:32:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |   while(!(lptr == st[2*idx + 1].v.size() && rptr == st[2*idx + 2].v.size())) {
      |           ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:32:50: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   32 |   while(!(lptr == st[2*idx + 1].v.size() && rptr == st[2*idx + 2].v.size())) {
      |                                             ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:33:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |     if(lptr == st[2*idx+1].v.size()) {
      |        ~~~~~^~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:38:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |     else if(rptr == st[2*idx+2].v.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...