Untitled
unknown
plain_text
9 months ago
1.5 kB
4
Indexable
#include<bits/stdc++.h> #define maxn 1000006 using namespace std; int n,p[maxn],d[maxn],ans[maxn],a[maxn],sum[maxn],ok[maxn],check[maxn],ch; deque <int> dq; void Tinh(){ a[n] = p[1] - d[n]; for (int i = 1; i <= n; i ++) a[i + n] = a[i]; for (int i = 1; i <= 2 * n; i ++) sum[i] = sum[i - 1] + a[i]; while(!dq.empty()) dq.pop_back(); for (int i = 0; i <= n * 2; i ++) { while(!dq.empty() && sum[i] <= sum[dq.back()]) dq.pop_back(); dq.push_back(i); if (i - dq.front() >= n) dq.pop_front(); if(i >= n) ok[i - n + 1] = (sum[i - n] <= sum[dq.front()]); } for (int i = 1; i <= n; i++)ans[i] = ok[n - i + 1]; for (int i = 1; i <= n; i++){ if (check[i] || ans[i]) cout << "YES" << '\n'; else cout << "NO" << '\n'; } } void solve(){ for (int i = 1; i <= 2 * n; i ++) sum[i] = sum[i - 1] + a[i]; for (int i = 0; i <= n * 2; i ++) { while(!dq.empty() && sum[i] <= sum[dq.back()]) dq.pop_back(); dq.push_back(i); if (i - dq.front() >= n) dq.pop_front(); if(i >= n) check[i - n + 1] = (sum[i - n] <= sum[dq.front()]); } for (int i = n; i >= 2; i --)a[n - i + 1] = p[i] - d[i - 1]; Tinh(); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin >> n; for (int i = 1; i <= n; i ++) { cin >> p[i] >> d[i]; a[i] = p[i] - d[i]; a[i + n] = a[i]; } solve(); return 0; }
Editor is loading...
Leave a Comment