QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#873865 | #5159. Justice Served | KimeyJ | RE | 0ms | 0kb | C++20 | 2.1kb | 2025-01-27 03:34:56 | 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