Submission #1224576

#TimeUsernameProblemLanguageResultExecution timeMemory
1224576LaMatematica14Tricks of the Trade (CEOI23_trade)C++20
10 / 100
8087 ms5100 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    int N, K; cin >> N >> K;
    vector<long long> T(N), S(N);
    for (int i = 0; i < N; i++) cin >> T[i];
    for (int i = 0; i < N; i++) cin >> S[i];
    //for (int i = 0; i < N; i++) S[i] -= T[i];
    
    long long best = -1e14;
    vector<int> belli(N, 0);
    for (int i = 0; i < N; i++) {
        priority_queue<int> pq;
        long long att = 0;
        for (int j = i; j < N; j++) {
            att += S[j]-T[j];
            pq.push(-S[j]);
            if (pq.size() > K) {
                att += pq.top();
                pq.pop();  
            }
            if (pq.size() == K) best = max(best, att);
        }
    }
    for (int i = 0; i < N; i++) {
        priority_queue<pair<int, int>> pq;
        long long att = 0;
        int lb = -1;
        for (int j = i; j < N; j++) {
            att += S[j]-T[j];
            pq.push({-S[j], j});
            if (pq.size() > K) {
                att += pq.top().first;
                if (pq.top().second <= lb) belli[pq.top().second] = 1;
                pq.pop();  
            }
            if ((pq.size() == K) && att == best) lb = j;
        }
        while (!pq.empty()) {
            if (pq.top().second <= lb) belli[pq.top().second] = 1;
            pq.pop();
        }
    }
    cout << best << endl;
    for (int i = 0; i < N; i++) cout << belli[i];
    cout << endl;
}
#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...