제출 #339500

#제출 시각아이디문제언어결과실행 시간메모리
339500amunduzbaevSchools (IZhO13_school)C++14
100 / 100
124 ms13916 KiB
/** made by amunduzbaev **/ #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/rope> using namespace __gnu_pbds; using namespace __gnu_cxx; using namespace std; #define ff first #define ss second #define pb push_back #define mp make_pair #define ub upper_bound #define lb lower_bound #define ll long long #define ld long double #define pii pair<int, int> #define pll pair<ll, ll> #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(),x.rend() #define fastios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define vll vector<ll> #define vii vector<int> #define vpii vector<pii> #define vpll vector<pll> #define cnt(a)__builtin_popcount(a) template<class T> bool umin(T& a, const T& b) {return a > b? a = b, true:false;} template<class T> bool umax(T& a, const T& b) {return a < b? a = b, true:false;} typedef tree<pii,null_type,less<pii>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; const int N = 3e5+5; const int mod = 1e9+7; const ll inf = 1e18; const ld Pi = acos(-1); ll s, n, m, k, ans, ss[N], mm[N]; pii a[N], tmp[N]; void solve(){ cin>>n>>m>>s; vector<pii> dif; for(int i=0;i<n;i++){ cin>>a[i].ff>>a[i].ss; dif.pb({a[i].ff - a[i].ss, i}); } sort(all(dif)); for(int i=0;i<n;i++) tmp[i] = a[dif[i].ss]; priority_queue<ll, vector <ll>, greater<ll>> tpp; for(int i=n-1;i>=n-m;i--){ tpp.push(tmp[i].ff); mm[i] = tmp[i].ff; if(i < n-1) mm[i] += mm[i+1]; } for(int i=n-m-1;i>=0;i--){ int sub = 0, add = 0; if(tmp[i].ff > tpp.top()){ sub = tpp.top(); tpp.pop(); add = tmp[i].ff; tpp.push(tmp[i].ff); } mm[i] = mm[i+1] - sub + add; } while(!tpp.empty()) tpp.pop(); for(int i=0;i<s;i++){ tpp.push(tmp[i].ss); ss[i] = tmp[i].ss; if(i) ss[i] += ss[i-1]; } for(int i=s;i<n;i++){ int sub = 0, add = 0; if(tmp[i].ss > tpp.top()){ sub = tpp.top(); add = tmp[i].ss; tpp.pop(); tpp.push(tmp[i].ss); } ss[i] = ss[i-1] - sub + add; } //for(int i=0;i<n;i++) cout<<ss[i]<<" "<<mm[i]<<"\n"; for(int i=s-1;i<n-m+1;i++) ans = max(ans, ss[i] + mm[i+1]); cout<<ans<<"\n"; return; } int main(){ fastios int t = 1; if(t) solve(); else { cin>>t; while (t--) solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...