Submission #96665

#TimeUsernameProblemLanguageResultExecution timeMemory
96665OrtKisik (COCI19_kisik)C++11
90 / 90
1905 ms91652 KiB
#include<algorithm> #include<iostream> #include<queue> #include<map> #define ll long long using namespace std; ll prefsum[1000005]; vector<pair<int,int> > bprints_h; vector<pair<int,int> > bprints_w; map<pair<int,int>,int> M; map<int,pair<int,int> > used; int main() { cin.sync_with_stdio(0); cin.tie(0); cin.exceptions(cin.failbit); int n, k, w, h; cin >> n >> k; for(int i=0;i<n;i++) { cin >> w >> h; bprints_h.push_back(make_pair(h,w)); bprints_w.push_back(make_pair(w,h)); } sort(bprints_h.begin(),bprints_h.end(),greater<pair<int,int> >()); sort(bprints_w.begin(),bprints_w.end()); M.insert(make_pair(make_pair(bprints_w[0].first, bprints_w[0].second),0)); prefsum[0] = bprints_w[0].first; for(int i=1;i<n;i++) { M.insert(make_pair(make_pair(bprints_w[i].first, bprints_w[i].second),i)); prefsum[i] = prefsum[i-1] + bprints_w[i].first; } int index, i=0; ll diff = 0, sum = 0, sol = 1000000000000000000; while(n>=k) { index = M.find(make_pair(bprints_h[i].second,bprints_h[i].first))->second; sum = prefsum[k-1]; sum -= diff; sol = min(sol, bprints_h[i].first*sum); if(index>k) used.insert(make_pair(index,make_pair(bprints_h[i].second,bprints_h[i].first))); if(index<=k) { k++; diff += bprints_h[i].second; while(used.find(k)!=used.end()) { diff += (used.find(k)->second.first); k++; } } i++; } cout << sol; return 0; }
#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...