Submission #396420

#TimeUsernameProblemLanguageResultExecution timeMemory
396420peuchHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
2201 ms87268 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN = 1e6 + 10; int n, m; int v[MAXN]; int l[MAXN]; int ans[MAXN]; struct event{ int a, b, c, id; event(int _a = 0, int _b = 0, int _c = 0, int _id = 0){ a = _a, b = _b, c = _c, id = _id; } void scan(int _id){ scanf("%d %d %d", &a, &b, &c); id = _id; } bool operator < (event x) const{ if(c == x.c) return a > x.a; return c > x.c; } }; vector<event> line; int seg[4 * MAXN]; void update(int pos, int ini, int fim, int id, int val); int query(int pos, int ini, int fim, int p, int q); int main(){ scanf("%d %d", &n, &m); for(int i = 1; i <= n; i++){ scanf("%d", &v[i]); l[i] = i - 1; while(l[i] > 0 && v[l[i]] <= v[i]) l[i] = l[l[i]]; line.push_back(event(-1, i, v[i] + v[l[i]], -1)); } for(int i = 1; i <= m; i++){ event aux; aux.scan(i); line.push_back(aux); } sort(line.begin(), line.end()); for(int i = 0; i < line.size(); i++){ if(line[i].a == -1) update(1, 1, n, line[i].b, l[line[i].b]); else ans[line[i].id] = query(1, 1, n, line[i].a, line[i].b) < line[i].a; } for(int i = 1; i <= m; i++) printf("%d\n", ans[i]); } void update(int pos, int ini, int fim, int id, int val){ if(ini > id || fim < id) return; if(ini == fim){ seg[pos] = max(seg[pos], val); return; } int mid = (ini + fim) >> 1, e = pos << 1, d = e | 1; update(e, ini, mid, id, val); update(d, mid + 1, fim, id, val); seg[pos] = max(seg[e], seg[d]); } int query(int pos, int ini, int fim, int p, int q){ if(ini > q || fim < p) return 0; if(ini >= p && fim <= q) return seg[pos]; int mid = (ini + fim) >> 1, e = pos << 1, d = e | 1; return max(query(e, ini, mid, p, q), query(d, mid + 1, fim, p, q)); }

Compilation message (stderr)

sortbooks.cpp: In function 'int main()':
sortbooks.cpp:48:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<event>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |  for(int i = 0; i < line.size(); i++){
      |                 ~~^~~~~~~~~~~~~
sortbooks.cpp:35:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   35 |  scanf("%d %d", &n, &m);
      |  ~~~~~^~~~~~~~~~~~~~~~~
sortbooks.cpp:37:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   37 |   scanf("%d", &v[i]);
      |   ~~~~~^~~~~~~~~~~~~
sortbooks.cpp: In member function 'void event::scan(int)':
sortbooks.cpp:19:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   19 |   scanf("%d %d %d", &a, &b, &c);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...