Untitled

 avatar
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