This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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=n-1; i>=0; --i)
#define dforsn(i, s, n) for(int i=n-1; i>=s; --i)
#define PB push_back
#define F first
#define S second
const int INF = 1000000010;
int n, m;
vector<pii> pts[100010];
vector<ll> lis(vector<int> v, vector<int> w){
vector<ll> ret;
set<pil> st;
st.insert({INF, 0});
forn(i, v.size()){
auto itr = st.upper_bound({v[i], 1000000000000000000});
ll cost = itr->S + w[i];
auto ins = st.insert({v[i], cost}).F;
while(true){
auto nxt = next(ins);
if(nxt == st.end() || nxt->S < ins->S) break;
st.erase(nxt);
}
while(true){
if(ins == st.begin()) break;
auto pr = prev(ins);
if(pr->S > ins->S) break;
st.erase(pr);
}
ret.PB(st.begin()->S);
}
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(), greater<pii>());
ll total = 0;
int l=0;
while(l<n){
if(pts[l].empty()){
l++;
continue;
}
ll ans=0;
int r = l+1;
while(r<n && !pts[r].empty()) ++r;
int len = r - l;
vector<int> v1, v2, w1, w2, d1, d2;
vector<ll> r1, r2;
forsn(i, l, r){
for(pii el:pts[i]) v1.PB(el.F), w1.PB(el.S);
d1.PB((int)v1.size() - 1);
}
dforsn(i, l, r){
for(pii el:pts[i]) v2.PB(el.F), w2.PB(el.S);
d2.PB((int)v2.size() - 1);
}
r1 = lis(v1, w1), r2 = lis(v2, w2);
if(l!=0 && r!=n){
forn(i, len - 1) ans=max(ans, r1[d1[i]] + r2[d2[len-2-i]]);
}
if(l!=0) ans=max(ans, r1.back());
if(r!=n) ans=max(ans, r2.back());
total+=ans;
l=r;
}
return total;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |