Submission #776987

#TimeUsernameProblemLanguageResultExecution timeMemory
776987borisAngelov새로운 문제 (POI11_met)C++17
74 / 100
6063 ms20552 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 300005; int n, m, q; long long required_sum[maxn]; struct element { int l; int r; long long x; }; element queries[maxn]; int answer[maxn]; vector<int> positions[maxn]; long long preffix[maxn]; void increase(int l, int r, long long delta) { if (l <= r) { preffix[l] += delta; preffix[r + 1] -= delta; } else { preffix[1] += delta; preffix[r + 1] -= delta; preffix[l] += delta; } } void divide(int l, int r, vector<int>& active) { if (l > r) { return; } int mid = (l + r) / 2; for (int i = 1; i <= m; ++i) { preffix[i] = 0LL; } for (int i = l; i <= mid; ++i) { increase(queries[i].l, queries[i].r, queries[i].x); } for (int i = 1; i <= m; ++i) { preffix[i] += preffix[i - 1]; } vector<int> left_active; vector<int> right_active; for (int i = 0; i < active.size(); ++i) { int id = active[i]; long long curr_sum = 0; for (auto pos : positions[id]) { curr_sum += preffix[pos]; if (curr_sum >= required_sum[id]) { break; } } if (curr_sum >= required_sum[id]) { answer[id] = mid; left_active.push_back(id); } else { required_sum[id] -= curr_sum; right_active.push_back(id); } } divide(l, mid - 1, left_active); divide(mid + 1, r, right_active); } void fastIO() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); } int main() { fastIO(); cin >> n >> m; for (int i = 1; i <= m; ++i) { int id; cin >> id; positions[id].push_back(i); } vector<int> active; for (int i = 1; i <= n; ++i) { cin >> required_sum[i]; answer[i] = -1; active.push_back(i); } cin >> q; for (int i = 1; i <= q; ++i) { cin >> queries[i].l >> queries[i].r >> queries[i].x; } divide(1, q, active); for (int i = 1; i <= n; ++i) { if (answer[i] == -1) { cout << "NIE\n"; } else { cout << answer[i] << "\n"; } } return 0; }

Compilation message (stderr)

met.cpp: In function 'void divide(int, int, std::vector<int>&)':
met.cpp:68:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |     for (int i = 0; i < active.size(); ++i)
      |                     ~~^~~~~~~~~~~~~~~
#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...