제출 #433763

#제출 시각아이디문제언어결과실행 시간메모리
433763someoneBoat (APIO16_boat)C++14
9 / 100
1 ms332 KiB
#include <bits/stdc++.h> using namespace std; struct Val { int i, val; }; struct Node { int deb, fin, sum; }; const int T = 9, M = 1 << T, N = 2*M, MOD = 1e9 + 7; Node node[N]; int a[N], b[N]; int getSum(int i) { if(i == 1) return 0; int sum = getSum(i/2); if(i % 2 == 1) sum += node[i-1].sum; return sum % MOD; } void add(int i, int val) { if(i == 0) return; node[i].sum = (node[i].sum + val) % MOD; add(i/2, val); } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); for(int i = 0; i < M; i++) { node[i + M].deb = i; node[i + M].fin = i + 1; } for(int i = M-1; i > -1; i--) { node[i].deb = node[i*2].deb; node[i].fin = node[i*2+1].fin; } int n; cin >> n; vector<Val> v; for(int i = 0; i < n; i++) { cin >> a[i] >> b[i]; v.push_back({i, a[i]}); } sort(v.begin(), v.end(), [](Val v1, Val v2) { return v1.val < v2.val; }); int pre = v[0].val; v[0].val = 1; for(int i = 1; i < n; i++) { bool eq = (pre != v[i].val); pre = v[i].val; v[i].val = v[i-1].val + eq; } sort(v.begin(), v.end(), [](Val v1, Val v2) { return v1.i < v2.i; }); int sum = 0; for(int i = 0; i < n; i++) { int val = getSum(v[i].val + M) + 1; sum = (sum + val) % MOD; add(v[i].val + M, val); } cout << sum; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...