제출 #520898

#제출 시각아이디문제언어결과실행 시간메모리
520898shmadHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
100 / 100
1130 ms131952 KiB
#pragma GCC optimize("O3", "unroll-loops") // "Ofast" #pragma GCC target("avx2", "bmi", "bmi2", "lzcnt", "popcnt") #include <bits/stdc++.h> #define int long long #define vt vector #define pb push_back #define all(x) (x).begin(), (x).end() #define sz(x) (int)(x).size() #define ff first #define ss second #define dbg(x) cerr << #x << " = " << x << '\n' using namespace std; using ll = long long; using pii = pair<int, int>; using vvi = vt< vt<int> >; const int N = 1e6 + 5, mod = 1e9 + 7, inf = 1e18 + 7, B = 500, LIM = (1ll << 60); const double eps = 1e-6; struct Event { int l, r, k; }; vt<Event> g[N]; int n, m, t[4 * N], w[N], ans[N], L[N]; stack<int> s; void upd (int pos, int val, int x = 1, int tl = 1, int tr = n) { if (tl == tr) { t[x] = max(t[x], val); return; } int tm = tl + tr >> 1, v = x + 1, u = x + ((tm - tl + 1) << 1); if (pos <= tm) upd(pos, val, v, tl, tm); else upd(pos, val, u, tm + 1, tr); t[x] = max(t[v], t[u]); } int get (int l, int r, int x = 1, int tl = 1, int tr = n) { if (tl > r || tr < l) return 0; if (tl >= l && tr <= r) return t[x]; int tm = tl + tr >> 1, v = x + 1, u = x + ((tm - tl + 1) << 1); int a = get(l, r, v, tl, tm); int b = get(l, r, u, tm + 1, tr); return max(a, b); } void solve () { cin >> n >> m; for (int i = 1; i <= n; i++) cin >> w[i]; for (int q = 1; q <= m; q++) { int l, r, k; cin >> l >> r >> k; g[r].pb({l, k, q}); } for (int i = 1; i <= n; i++) { L[i] = i; while (!s.empty() && w[s.top()] <= w[i]) { L[i] = L[s.top()]; s.pop(); } s.push(i); } for (int i = 1; i <= n; i++) { int j = L[i] - 1; if (j) upd(j, w[i] + w[j]); for (auto [l, k, id]: g[i]) ans[id] = (get(l, n) <= k); } for (int i = 1; i <= m; i++) cout << ans[i] << '\n'; cout << '\n'; } bool testcases = 0; signed main() { #ifdef ONLINE_JUDGE freopen(".in", "r", stdin); freopen(".out", "w", stdout); #endif cin.tie(0) -> sync_with_stdio(0); int test = 1; if (testcases) cin >> test; for (int cs = 1; cs <= test; cs++) { solve(); } }

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

sortbooks.cpp: In function 'void upd(long long int, long long int, long long int, long long int, long long int)':
sortbooks.cpp:36:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   36 |  int tm = tl + tr >> 1, v = x + 1, u = x + ((tm - tl + 1) << 1);
      |           ~~~^~~~
sortbooks.cpp: In function 'long long int get(long long int, long long int, long long int, long long int, long long int)':
sortbooks.cpp:45:14: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   45 |  int tm = tl + tr >> 1, v = x + 1, u = x + ((tm - tl + 1) << 1);
      |           ~~~^~~~
#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...