제출 #1034404

#제출 시각아이디문제언어결과실행 시간메모리
1034404PhuocArt Exhibition (JOI18_art)C++14
100 / 100
147 ms32656 KiB
#include <bits/stdc++.h> #include <iostream> #include <cmath> #include <iomanip> #include <vector> #include <map> #include <stack> #include <queue> using namespace std; #define ll long long #define pb push_back #define el '\n' #define mpair make_pair #define MASK(i) (1LL << (i)) #define BIT(mask, i) (((mask) >> (i)) & 1) #define fi first #define se second /* Author: Pham Gia Phuoc */ const ll MOD = (ll)(1e9) + 1LL * 19972207; template <class T1, class T2> void add(T1 &a, T2 b){ a += b; if(a >= MOD) a -= MOD; } template <class T1, class T2> void sub(T1 &a, T2 b){ a -= b; if(a < 0) a += MOD; } template <class T1, class T2> bool minimize(T1 &a, T2 b){ if(a > b){a = b; return true;} return false; } template <class T1, class T2> bool maximize(T1 &a, T2 b){ if(a < b){a = b; return true;} return false; } /** END OF TEMPLATE. DRINK A CUP OF COFFEE BEFORE READING MY CODE **/ const int MAX = 500010; const ll INF = (ll) 1e18 + 67LL; const int oo = (int)(1e9 + 7); const int NUM_BIT = 62; #define FOR(i, a, b) for(int i = a; i <= b; i++) int n; long long size[MAX], values[MAX]; void init(){ cin >> n; FOR(i, 1, n) cin >> size[i] >> values[i]; } namespace subtask1{ bool check(){ return n <= 16; } void solve(){ long long ans = -INF; FOR(mask, 1, MASK(n) - 1){ long long sumVal = 0, maxSize = 0, minSize = INF; FOR(i, 0, n - 1) if(BIT(mask, i)) {sumVal += values[i + 1]; maximize(maxSize, size[i + 1]); minimize(minSize, size[i + 1]);} maximize(ans, sumVal - (maxSize - minSize)); } cout << ans; } } namespace subtask2{ bool check(){ return n <= 500000; } pair <long long, long long> arts[MAX]; long long sum[MAX]; void solve(){ FOR(i, 1, n) arts[i] = make_pair(size[i], values[i]); sort(arts + 1, arts + n + 1); long long ans = -INF; long long mi = INF; FOR(i, 1, n){ sum[i] = sum[i - 1] + arts[i].se; minimize(mi, sum[i - 1] - arts[i].fi); maximize(ans, sum[i] - arts[i].fi - mi); } cout << ans; } } void solve(){ // if(subtask1::check()){subtask1::solve(); return;} if(subtask2::check()){subtask2::solve(); return;} } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // #define test "test" // freopen(test".inp", "r", stdin); // freopen(test".out", "w", stdout); srand(time(0)); int t = 1; while(t--){ // gen(); init(); solve(); } return 0; } /*** ROAD TO VOI 2025 ***/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...