25pts求调,感觉很对,马蜂良好
查看原帖
25pts求调,感觉很对,马蜂良好
974277
水星湖psgqwq楼主2024/6/30 11:50
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 2e5 + 5, MX = 1e18;

struct qu {
    int l, r;
} a[N], b[N], c[N];

int n, t[N];

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;
    for(int i = 1; i <= n; i++) cin >> t[i];
    for(int i = 1; i < n; i++)  cin >> c[i].l >> c[i].r;
    
    a[1] = {0, MX};
    for(int i = 2; i <= n; i++) {
        if (c[i-1].l > a[i-1].r || c[i-1].r < a[i-1].l) 
            a[i] = {MX, -MX};
        else 
            a[i] = qu{max(c[i-1].l - t[i], a[i-1].l), min(c[i-1].r, a[i-1].r)};
    }
    
    b[n] = {0, MX};
    for(int i = n - 1; i >= 1; i--) {
        if (c[i].l > b[i+1].r || c[i].r < b[i+1].l) 
            b[i] = {MX, -MX};
        else 
            b[i] = qu{max(c[i].l - t[i], b[i+1].l), min(c[i].r, b[i+1].r)};
    }

    for(int i = 1; i <= n; i++) {
        int L = max(a[i].l, b[i].l);
        int R = min(a[i].r, b[i].r);
        if(L <= R) cout << L << endl;
        else cout << -1 << endl;
    }
    
    return 0;
}

2024/6/30 11:50
加载中...