제출 #483074

#제출 시각아이디문제언어결과실행 시간메모리
483074blueSails (IOI07_sails)C++17
0 / 100
1090 ms14656 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; const long long INF = 1'000'000'000'000'000'000LL; struct segtree { int l; int r; pair<long long, int> v; long long lp = 0; segtree* left = NULL; segtree* right = NULL; segtree() { ; } segtree(int L, int R) { l = L; r = R; v = make_pair(0LL, l); if(l == r) return; int m = (l+r)/2; left = new segtree(l, m); right = new segtree(m+1, r); } void add(int L, int R, long long V) { if(R < l || r < L) return; else if(L <= l && r <= R) { v.first += V; lp += V; } else { left->add(L, R, V); right->add(L, R, V); v = min(left->v, right->v); v.first += lp; } } pair<long long, int> rangemin(int L, int R) { if(R < l || r < L) return make_pair(INF, -1); else if(L <= l && r <= R) return v; else { pair<long long, int> ans = min(left->rangemin(L, R), right->rangemin(L, R)); ans.first += lp; return ans; } } }; const int mx = 100'000; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int N; cin >> N; vector< pair<int, int> > S(N); for(int i = 0; i < N; i++) cin >> S[i].first >> S[i].second; sort(S.begin(), S.end()); segtree ST(1, mx); for(int i = 0; i < N; i++) { while(S[i].second > 0) { pair<long long, int> mn = ST.rangemin(1, S[i].first); int upd = min(S[i].second, S[i].first - mn.second + 1); S[i].second -= upd; ST.add(mn.second, mn.second + upd - 1, +1); } } long long ans = 1; for(int h = 1; h <= mx; h++) { pair<long long, int> p = ST.rangemin(h, h); ans += (p.first * (p.first - 1))/2; } cout << 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...
#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...