제출 #1158752

#제출 시각아이디문제언어결과실행 시간메모리
1158752aegLasers (NOI19_lasers)C++20
10 / 100
56 ms6216 KiB
#include <bits/stdc++.h> using namespace std; struct segmentset { set<pair<int, int>> s; int ans() { int ret = 0; for(auto &[x, y]: s) ret += y - x + 1; return ret; } void insert(int l, int r) { if (s.size() == 0) { s.insert({ l, r}); return; } auto a = s.lower_bound({ l, INT_MIN}); while (a != s.end() && r >= a->first) { r = max(r, a->second); s.erase(*a); a = s.lower_bound({ l, INT_MIN}); } while (a != s.begin()) { a--; if (l <= a->second) { l = min(l, a->first); s.erase(*a); a = s.lower_bound({ l, INT_MIN}); } else break; } s.insert({l, r}); } }; int main() { cin.tie(0)->sync_with_stdio(0); int l, r; cin >> l >> r; segmentset s; while (r--) { int n; cin >> n; vector<int> a(n); vector<int> ri(n); vector<int> li(n); for (auto &x : a) { cin >> x; } int curi = 0; for (int i = 0; i < n; i++) { curi += a[i]; ri[i] = curi; } curi = l + 1; for (int i = n-1; i >= 0; i--) { curi -= a[i]; li[i] = curi; } for (int i = 0; i < n; i++) { if(li[i] <= ri[i]) s.insert(li[i], ri[i]); } } cout << s.ans() << '\n'; }
#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...