제출 #330112

#제출 시각아이디문제언어결과실행 시간메모리
330112lohachoPort Facility (JOI17_port_facility)C++14
0 / 100
5 ms6636 KiB
#include <bits/stdc++.h> using namespace std; using LL = long long; const int MOD = (int)1e9 + 7; const int NS = (int)2e5 + 4; int N; pair<int, int> a[NS]; pair<int, int> tree[NS * 4]; void upd(pair<int, int>&A, int B){ if(B < A.first){ A.second = A.first; A.first = B; } else if(B < A.second){ A.second = B; } } void push(int num, int s, int e, int pos, int val){ if(pos < s || pos > e){ return; } if(s == e){ upd(tree[num], val); return; } push(num * 2, s, (s + e) / 2, pos, val); push(num * 2 + 1, (s + e) / 2 + 1, e, pos, val); tree[num] = tree[num * 2]; upd(tree[num], tree[num * 2 + 1].first); upd(tree[num], tree[num * 2 + 1].second); } pair<int, int> get(int num, int s, int e, int fs, int fe){ if(fe < s || fs > e || fs > fe){ return {MOD, MOD}; } if(s >= fs && e <= fe){ return tree[num]; } pair<int, int> l = get(num * 2, s, (s + e) / 2, fs, fe); pair<int, int> r = get(num * 2 + 1, (s + e) / 2 + 1, e, fs, fe); upd(l, r.first), upd(l, r.second); return l; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); for(int i = 0; i < NS * 4; ++i){ tree[i].first = tree[i].second = MOD; } cin >> N; for(int i = 1; i <= N; ++i){ cin >> a[i].first >> a[i].second; } sort(a + 1, a + N + 1, [&](pair<int, int>&A, pair<int, int>&B){return A.second < B.second;}); int ans = 1; for(int i = 1; i <= N; ++i){ pair<int, int> rv = get(1, 1, NS - 1, a[i].first + 1, a[i].second - 1); if(rv.first < a[i].first && rv.second < a[i].first){ ans = 0; break; } if(rv.first > a[i].first){ ans = (ans * 2) % MOD; } push(1, 1, NS - 1, a[i].second, a[i].first); } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...