QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#873865#5159. Justice ServedKimeyJRE 0ms0kbC++202.1kb2025-01-27 03:34:562025-01-27 03:34:56

Judging History

你现在查看的是最新测评结果

  • [2025-01-27 03:34:56]
  • 评测
  • 测评结果:RE
  • 用时:0ms
  • 内存:0kb
  • [2025-01-27 03:34:56]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

#define forr(i, a, b) for(ll i = (ll) a; i < (ll) b; i++)
#define forn(i, n) forr(i, 0, n)
#define dforn(i,n) for(int i = n-1; i>=0; i--)
#define pb push_back
#define fst first
#define snd second
#define ln '\n'
#define sz(c) ((int)c.size())
#define zero(v) memset(v, 0, sizeof(v))
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
const ll MOD = 1e9 + 7;
const ll MAXN = 200100;
const ll INF = 9e18;
#define BK 500

ll bloq[MAXN/BK + 3],maxR[MAXN];
vector<tuple<ll,ll,ll>> rgs;
int ans[MAXN];


bool cmp(tuple<ll,ll,ll> &a, tuple<ll,ll,ll> &b) {
    auto [la,ra,ia] = a;
    auto [lb,rb,ib] = b;
    return (la < lb || (la == lb && ra > rb));
}

void getAns(ll r,int idx) {
    int nb = 0;
    dforn(k,401) {
        if (bloq[k] >= r || k == 0) {
            //cout << k << " " << bloq[k] << ln;
            nb = k;
            break;
        }
    }
    for(int i = ((nb+1)*BK)+1;i>=nb*BK;i--) {
        if (maxR[i]>= r) {
            //cout << "entro el id= " << idx << " " << i << ln; 
            ans[idx] = i+1;
            maxR[i+1] = max(maxR[i+1],r);
            bloq[i/BK] = max(bloq[i/BK],r);
            return;
        }
        else if (i == 0) {
            maxR[i] = max(maxR[i],r);
            ans[idx] = i;
            bloq[nb] = max(bloq[nb],r);
            return;
        }
        
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    zero(bloq);
    zero(maxR);
    int n;
    cin >> n;
    forn(i,n) {
        ll l,r;
        cin >> l >> r;
        rgs.pb(make_tuple(l,l+r,i));
    }
    sort(rgs.begin(),rgs.end(),cmp);
    for(auto [l,r,idx] : rgs) {
        //cout << "l = " << l << " " << " r=" << r << ln;
        //cout << l << " " << r << " " << idx << ln;
        getAns(r,idx);
    }
    //cout << "------------------------------------------------------" << ln;
    forn(i,n) cout << ans[i] << " ";
    cout << ln; 
}

詳細信息

Test #1:

score: 0
Dangerous Syscalls

input:

4
2 8
1 7
4 5
5 2

output:


result: