Submission #333798

#TimeUsernameProblemLanguageResultExecution timeMemory
333798LucaDantasHiring (IOI09_hiring)C++17
0 / 100
313 ms25196 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int,int>; #define ff first #define ss second constexpr int maxn = 5e5+10, logn = 20; struct Fraction { int p, q, id; Fraction() {} Fraction(int a, int b, int c) : p(a), q(b), id(c) {} bool operator<(Fraction b) { return 1ll*p*b.q < 1ll*q*b.p; } ll operator*(ll a) {return (1ll * a * q) / p;} } val[maxn]; struct BIT { ll bit[maxn]; void upd(int x, int v) { for(; x < maxn; x += x&-x) bit[x] += v; } ll query(int x) { ll ans = 0; for(; x > 0; x -= x&-x) ans += bit[x]; return ans; } int bs(ll& val) { int pos = 0; for(int l = logn; l >= 0; l--) { if(pos + (1 << l) >= 10) continue; if(bit[pos + (1 << l)] <= val) pos += (1 << l), val -= bit[pos]; } return pos; } } bit, ligados; int pos[maxn]; pii opa[maxn]; int main() { int n; ll w; scanf("%d %lld", &n, &w); for(int i = 0, a, b; i < n; i++) scanf("%d %d", &a, &b), val[i] = Fraction(a, b, i), opa[i] = {b, i}; sort(opa, opa+n); for(int i = 0; i < n; i++) pos[opa[i].ss] = i+1; sort(val, val+n); ll ans = 0, sobra = 0; for(int i = 0; i < n; i++) { bit.upd(pos[val[i].id], val[i].q); ligados.upd(pos[val[i].id], 1); ll pay = val[i] * w; int p = bit.bs(pay); int here = ligados.query(p); if(here == ans) sobra = max(sobra, (pay*val[i].p)/val[i].q); else if(here > ans) ans = here, sobra = (pay*val[i].p)/val[i].q; } printf("%lld\n", ans); puts("TESTANDO SE A RESPOSTA TÁ CERTA DPS RECUPERO QUAL FOI"); }

Compilation message (stderr)

hiring.cpp: In function 'int main()':
hiring.cpp:49:20: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   49 |  int n; ll w; scanf("%d %lld", &n, &w);
      |               ~~~~~^~~~~~~~~~~~~~~~~~~
hiring.cpp:51:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   51 |   scanf("%d %d", &a, &b), val[i] = Fraction(a, b, i), opa[i] = {b, i};
      |   ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...