Submission #1122555

#TimeUsernameProblemLanguageResultExecution timeMemory
1122555Mousa_AboubakerNile (IOI24_nile)C++17
32 / 100
161 ms17788 KiB
#include "nile.h" #include <bits/stdc++.h> using namespace std; const int inf = 1e9 + 1; vector<long long> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) { vector<int> w = W, a = A, b = B, e = E; int n = w.size(), q = e.size(); sort(w.begin(), w.end()); map<int, vector<int>, greater<int>> mp1; map<int, int> res; for(int i = 1; i < n; i++) mp1[w[i] - w[i - 1]].push_back(i); map<int, int> dp; dp[inf] = n + (n & 1); set<pair<int, int>> lst; lst.insert({0, n - 1}); int lst_idx = inf; for(auto [f, s]: mp1) { for(auto i: s) { auto it = prev(lst.upper_bound({i, -1})); auto [ff, ss] = *it; lst.erase(it); lst.insert({ff, i - 1}); lst.insert({i, ss}); int len1 = ss - ff + 1; int len2 = i - ff; int len3 = ss - i + 1; if(!(len1 & 1)) if(len2 & 1) dp[f] += 2; } //cout << f << '\n'; //for(auto [f, s]: lst) //{ // cout << f << ' ' << s << '\n'; //} dp[f] += dp[lst_idx]; lst_idx = f; } vector<long long> fin(q); for(int i = 0; i < q; i++) { fin[i] = dp.upper_bound(e[i]) -> second; } return fin; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...