From 7e7e4f27a15e9d040c8e4207ff866407ce04fbd3 Mon Sep 17 00:00:00 2001 From: Baoshuo Date: Sat, 16 Jul 2022 15:52:52 +0800 Subject: [PATCH] P6146 [USACO20FEB]Help Yourself G https://www.luogu.com.cn/record/79815317 --- Luogu/P6146/P6146.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Luogu/P6146/P6146.cpp diff --git a/Luogu/P6146/P6146.cpp b/Luogu/P6146/P6146.cpp new file mode 100644 index 00000000..f4c822fc --- /dev/null +++ b/Luogu/P6146/P6146.cpp @@ -0,0 +1,51 @@ +#include +#include + +using std::cin; +using std::cout; +const char endl = '\n'; + +const int N = 1e5 + 5; +const int mod = 1e9 + 7; + +int n, s[N << 1], f[N]; +std::pair a[N]; + +int pow(int a, int b) { + int res = 1; + + while (b) { + if (b & 1) res = 1ll * res * a % mod; + a = 1ll * a * a % mod; + b >>= 1; + } + + return res; +} + +int main() { + std::ios::sync_with_stdio(false); + cin.tie(nullptr); + + cin >> n; + + for (int i = 1; i <= n; i++) { + cin >> a[i].first >> a[i].second; + + s[a[i].second]++; + } + + std::sort(a + 1, a + 1 + n); + + for (int i = 1; i <= n << 1; i++) { + s[i] += s[i - 1]; + } + + for (int i = 1; i <= n; i++) { + f[i] = (f[i - 1] * 2 % mod + pow(2, s[a[i].first - 1]) % mod) % mod; + } + + cout << f[n] << endl; + + return 0; +}