Submission #138197

#TimeUsernameProblemLanguageResultExecution timeMemory
138197vinceHoliday (IOI14_holiday)C++14
30 / 100
95 ms3620 KiB
#include <stdio.h> #include <math.h> #include <string.h> #include <limits.h> #include <stdlib.h> #include <algorithm> #include <iostream> #include <utility> #include <vector> #include <string> #include <unordered_map> #include <map> #include <queue> #include <set> #include <stack> using namespace std; #define fi first #define se second typedef pair<int,int> ii; int n, s, d; int A[100003]; long long solve0() { long long sum = 0, res = 0; priority_queue<int, vector<int>, greater<int> > pq; for(int i = 0; i < n; i++) { pq.push(A[i]); sum += A[i]; while(pq.size() > d) { // printf("%d %d\n", i, pq.top()); sum -= pq.top(); pq.pop(); } res = max(res, sum); d--; } return res; } long long best[100003]; long long get_big() { // printf("start : %d\n", s); memset(best, 0, sizeof best); int rem = d, used = 0; set<int, greater<int> > st; for(int i = s-1; i >= 0; i--) { rem--; used++; st.insert(A[i]); long long sum = 0; auto it = st.begin(); for(int i = 1; i <= rem && it != st.end(); i++) { sum += *it; best[used+i] = max(best[used+i], sum); ++it; } } for(int i = 1; i <= d; i++) best[i] = max(best[i-1], best[i]); // for(int i = 1; i <= d; i++) // printf("%d %lld\n", i, best[i]); rem = d; long long mx = best[d]; st.clear(); for(int i = s; i < n; i++) { st.insert(A[i]); if(rem < 0) break; long long sum = 0; auto it = st.begin(); for(int i = 1; i <= rem && it != st.end(); i++) { sum += *it; mx = max(mx, sum+best[rem-i]); ++it; } rem-=2; } return mx; } long long solve2() { long long a = get_big(); reverse(A, A+n); s = n-1-s; long long b = get_big(); return max(a,b); } long long findMaxAttraction(int N, int start, int D, int attraction[]) { n = N; s = start; d = D; for(int i = 0; i < n; i++) { A[i] = attraction[i]; } if(start == 0) return solve0(); else return solve2(); }

Compilation message (stderr)

holiday.cpp: In function 'long long int solve0()':
holiday.cpp:34:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(pq.size() > d)
         ~~~~~~~~~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...