Submission #70200

#TimeUsernameProblemLanguageResultExecution timeMemory
70200zubecHoliday (IOI14_holiday)C++14
23 / 100
5038 ms6048 KiB
#include"holiday.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N = 100100;

int n, a[N];
ll suff[N];

long long int findMaxAttraction(int n, int start, int d, int attraction[]) {
    ::n = n;
    for (int i = 1; i <= n; i++)
        a[i] = attraction[i-1];
    ++start;
    if (start == 1){
        ll ans = 0;
        multiset<int> q;
        int curd = 0;
        ll sum = 0;
        for (int i = 1; i <= n; i++){
            ++curd;
            q.insert(a[i]);
            sum += a[i];
            while(!q.empty() && curd > d){
                sum -= *q.begin();
                q.erase(q.begin());
                --curd;
            }
            if (curd <= d){
                ans = max(ans, sum);
            }
            ++curd;
        }

        return ans;
    }
    ll ans = 0;
    ++d;
    for (int i = start; i >= 1; i--){
        vector <int> vec;
        for (int j = i; j <= n; j++){
            vec.push_back(a[j]);
        }
        sort(vec.begin(), vec.end());
        for (int j = i; j <= n; j++){
            suff[j] = suff[j-1] + vec[j-i];
        }
        for (int j = i; j <= n; j++){
            int curd = abs(start-i)*2+abs(start-j);
            int sz = min(j-i+1, d-curd);
            if (sz <= 0)
                break;
            if (start <= j)
            ans = max(ans, suff[j]-suff[j-sz]);
        }
    }

    reverse(a+1, a+n+1);
    start = n-start+1;


    for (int i = start; i >= 1; i--){
        vector <int> vec;
        for (int j = i; j <= n; j++){
            vec.push_back(a[j]);
        }
        sort(vec.begin(), vec.end());
        for (int j = i; j <= n; j++){
            suff[j] = suff[j-1] + vec[j-i];
        }
        for (int j = i; j <= n; j++){
            int curd = abs(start-i)*2+abs(start-j);
            int sz = min(j-i+1, d-curd);
            if (sz <= 0)
                break;
            if (start <= j)
            ans = max(ans, suff[j]-suff[j-sz]);
        }
    }


    return ans;

}

Compilation message (stderr)

grader.cpp: In function 'int main()':
grader.cpp:7:12: warning: variable 'n_s' set but not used [-Wunused-but-set-variable]
     int i, n_s;
            ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...