Submission #828006

#TimeUsernameProblemLanguageResultExecution timeMemory
828006Username4132Catfish Farm (IOI22_fish)C++17
100 / 100
128 ms27228 KiB
#include "fish.h" #include<iostream> #include<vector> #include<set> #include<algorithm> using namespace std; using ll = long long; using pii = pair<int, int>; using pil = pair<int, ll>; #define forn(i, n) for(int i=0; i<(int)n; ++i) #define forsn(i, s, n) for(int i=s; i<(int)n; ++i) #define dforn(i, n) for(int i=(int)n-1; i>=0; --i) #define dforsn(i, s, n) for(int i=(int)n-1; i>=s; --i) #define PB push_back #define F first #define S second int n, m; vector<pii> pts[300010]; ll bd[100010], bu[100010]; void update(int r, ll value, ll* bit){ for(; r<n+1; r=r|(r+1)) bit[r]=max(bit[r], value); } ll query(int r, ll* bit, ll base=0){ ll ret = base; for(; r>=0; r=(r&(r+1))-1) ret=max(ret, bit[r]); return ret; } ll max_weights(int N, int M, vector<int> X, vector<int> Y, vector<int> W) { n=N, m=M; forn(i, m) pts[X[i]].PB({Y[i], W[i]}); forn(i, n) sort(pts[i].begin(), pts[i].end()); forn(i, n+1) bd[i]=-1000000000000000000; ll mx=0; forn(i, n){ mx = max(mx, query(n, bu)); ll emp = max(query(n, bd), query(n, bu)); for(pii el:pts[i]){ ll a = query(el.F - 1, bu), b = query(n, bd, -1000000000000000000); update(el.F, max(a, b) + el.S, bu); } dforn(ind, pts[i].size()){ pii el = pts[i][ind]; ll a = query(n - el.F - 1, bd, -1000000000000000000); update(n - el.F, a + el.S, bd); } update(0, emp, bd); } return max(mx, query(n, bd)); }
#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...