제출 #1321692

#제출 시각아이디문제언어결과실행 시간메모리
1321692miniobSightseeing in Kyoto (JOI22_kyoto)C++20
100 / 100
65 ms3856 KiB
#include <bits/stdc++.h> using namespace std; long long a[100007]; long long b[100007]; int main() { long long h, w; cin >> h >> w; vector<pair<long long, long long>> ra; vector<pair<long long, long long>> rb; for(long long i = 0; i < h; i++) { cin >> a[i]; } for(long long i = 0; i < w; i++) { cin >> b[i]; } for(long long i = 1; i < h; i++) { pair<long long, long long> cur; cur = {1, a[i] - a[i - 1]}; while(!ra.empty() && (__int128)ra.back().second * (__int128)cur.first >= (__int128)cur.second * (__int128)ra.back().first) { cur.first += ra.back().first; cur.second += ra.back().second; ra.pop_back(); } ra.push_back(cur); } for(long long i = 1; i < w; i++) { pair<long long, long long> cur; cur = {1, b[i] - b[i - 1]}; while(!rb.empty() && (__int128)rb.back().second * (__int128)cur.first >= (__int128)cur.second * (__int128)rb.back().first) { cur.first += rb.back().first; cur.second += rb.back().second; rb.pop_back(); } rb.push_back(cur); } long long p1, p2, it1, it2, odp = 0; p1 = p2 = it1 = it2 = 0; while(it1 != ra.size() || it2 != rb.size()) { bool czyp = false; if(it2 == rb.size()) { czyp = true; } else if(it1 != ra.size() && (__int128)ra[it1].second * (__int128)rb[it2].first < (__int128)rb[it2].second * (__int128)ra[it1].first) { czyp = true; } if(czyp) { odp += p2 * ra[it1].first; p1 += ra[it1].second; it1++; } else { odp += p1 * rb[it2].first; p2 += rb[it2].second; it2++; } } cout << odp + a[0] * (w - (long long)1) + b[0] * (h - (long long)1) << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...