Untitled
unknown
plain_text
a year ago
1.5 kB
8
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