結果
問題 | No.2650 [Cherry 6th Tune *] セイジャク |
ユーザー | OnjoujiToki |
提出日時 | 2024-02-23 22:58:51 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 367 ms / 2,500 ms |
コード長 | 5,288 bytes |
コンパイル時間 | 1,644 ms |
コンパイル使用メモリ | 148,432 KB |
実行使用メモリ | 28,672 KB |
最終ジャッジ日時 | 2024-09-29 08:15:40 |
合計ジャッジ時間 | 10,577 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,248 KB |
testcase_02 | AC | 70 ms
10,752 KB |
testcase_03 | AC | 17 ms
5,248 KB |
testcase_04 | AC | 100 ms
7,808 KB |
testcase_05 | AC | 79 ms
7,808 KB |
testcase_06 | AC | 40 ms
5,760 KB |
testcase_07 | AC | 79 ms
7,040 KB |
testcase_08 | AC | 33 ms
6,016 KB |
testcase_09 | AC | 189 ms
16,000 KB |
testcase_10 | AC | 188 ms
16,128 KB |
testcase_11 | AC | 194 ms
16,128 KB |
testcase_12 | AC | 187 ms
16,000 KB |
testcase_13 | AC | 195 ms
16,128 KB |
testcase_14 | AC | 192 ms
16,128 KB |
testcase_15 | AC | 190 ms
16,128 KB |
testcase_16 | AC | 315 ms
28,672 KB |
testcase_17 | AC | 308 ms
28,544 KB |
testcase_18 | AC | 300 ms
28,544 KB |
testcase_19 | AC | 302 ms
28,544 KB |
testcase_20 | AC | 304 ms
28,672 KB |
testcase_21 | AC | 280 ms
28,672 KB |
testcase_22 | AC | 291 ms
28,544 KB |
testcase_23 | AC | 344 ms
27,776 KB |
testcase_24 | AC | 352 ms
27,648 KB |
testcase_25 | AC | 320 ms
26,880 KB |
testcase_26 | AC | 331 ms
27,136 KB |
testcase_27 | AC | 331 ms
27,648 KB |
testcase_28 | AC | 335 ms
27,520 KB |
testcase_29 | AC | 357 ms
27,648 KB |
testcase_30 | AC | 233 ms
28,544 KB |
testcase_31 | AC | 367 ms
28,544 KB |
testcase_32 | AC | 112 ms
11,776 KB |
コンパイルメッセージ
main.cpp: In function 'int kth(int, int, int)': main.cpp:167:1: warning: control reaches end of non-void function [-Wreturn-type] 167 | } | ^
ソースコード
#include <algorithm> #include <array> #include <bitset> #include <cassert> #include <chrono> #include <cmath> #include <complex> #include <cstdint> #include <cstring> #include <ctime> #include <deque> #include <iomanip> #include <iostream> #include <iterator> #include <map> #include <numeric> #include <queue> #include <random> #include <set> #include <stack> #include <unordered_map> #include <unordered_set> #include <vector> template <int mod> struct ModInt { int x; ModInt() : x(0) {} ModInt(long long y) : x(y >= 0 ? y % mod : (mod - (-y) % mod) % mod) {} ModInt &operator+=(const ModInt &p) { if ((x += p.x) >= mod) x -= mod; return *this; } ModInt &operator-=(const ModInt &p) { if ((x += mod - p.x) >= mod) x -= mod; return *this; } ModInt &operator*=(const ModInt &p) { x = (int)(1LL * x * p.x % mod); return *this; } ModInt &operator/=(const ModInt &p) { *this *= p.inverse(); return *this; } ModInt &operator^=(long long p) { // quick_pow here:3 ModInt res = 1; for (; p; p >>= 1) { if (p & 1) res *= *this; *this *= *this; } return *this = res; } ModInt operator-() const { return ModInt(-x); } ModInt operator+(const ModInt &p) const { return ModInt(*this) += p; } ModInt operator-(const ModInt &p) const { return ModInt(*this) -= p; } ModInt operator*(const ModInt &p) const { return ModInt(*this) *= p; } ModInt operator/(const ModInt &p) const { return ModInt(*this) /= p; } ModInt operator^(long long p) const { return ModInt(*this) ^= p; } bool operator==(const ModInt &p) const { return x == p.x; } bool operator!=(const ModInt &p) const { return x != p.x; } explicit operator int() const { return x; } // added by QCFium ModInt operator=(const int p) { x = p; return ModInt(*this); } // added by QCFium ModInt inverse() const { int a = x, b = mod, u = 1, v = 0, t; while (b > 0) { t = a / b; a -= t * b; std::swap(a, b); u -= t * v; std::swap(u, v); } return ModInt(u); } friend std::ostream &operator<<(std::ostream &os, const ModInt<mod> &p) { return os << p.x; } friend std::istream &operator>>(std::istream &is, ModInt<mod> &a) { long long x; is >> x; a = ModInt<mod>(x); return (is); } }; using mint = ModInt<998244353>; const int MOD = 998244353; struct MComb { std::vector<mint> fact; std::vector<mint> inversed; MComb(int n) { // O(n+log(mod)) fact = std::vector<mint>(n + 1, 1); for (int i = 1; i <= n; i++) fact[i] = fact[i - 1] * mint(i); inversed = std::vector<mint>(n + 1); inversed[n] = fact[n] ^ (MOD - 2); for (int i = n - 1; i >= 0; i--) inversed[i] = inversed[i + 1] * mint(i + 1); } mint ncr(int n, int r) { if (n < r) return 0; return (fact[n] * inversed[r] * inversed[n - r]); } mint npr(int n, int r) { return (fact[n] * inversed[n - r]); } mint nhr(int n, int r) { assert(n + r - 1 < (int)fact.size()); return ncr(n + r - 1, r); } }; mint ncr(int n, int r) { mint res = 1; for (int i = n - r + 1; i <= n; i++) res *= i; for (int i = 1; i <= r; i++) res /= i; return res; } #include <algorithm> #include <set> #include <vector> struct ChthollyNode { int l, r; mutable int v; ChthollyNode(int l, int r, int v) : l(l), r(r), v(v) {} bool operator<(const ChthollyNode &o) const { return l < o.l; } }; std::set<ChthollyNode> tr; std::set<ChthollyNode>::iterator split(int pos) { auto it = tr.lower_bound(ChthollyNode(pos, 0, 0)); if (it != tr.end() && it->l == pos) return it; it--; int l = it->l, r = it->r, v = it->v; tr.erase(it); tr.insert(ChthollyNode(l, pos - 1, v)); return tr.insert(ChthollyNode(pos, r, v)).first; } // range add void add(int l, int r, int v) { // [l, r] auto end = split(r + 1); for (auto it = split(l); it != end; it++) it->v += v; } // range assign void assign(int l, int r, int v) { auto end = split(r + 1), begin = split(l); // 顺序不能颠倒,否则可能RE tr.erase(begin, end); // 清除一系列节点 tr.insert(ChthollyNode(l, r, v)); // 插入新的节点 } // tr.insert(ChthollyNode(1, 1e9, 0)); // 初始化的时候插入一个大区间 // range kth int kth(int l, int r, int k) { auto end = split(r + 1); std::vector<std::pair<int, int>> v; // 这个pair里存节点的值和区间长度 for (auto it = split(l); it != end; it++) v.emplace_back(it->v, it->r - it->l + 1); std::sort(v.begin(), v.end()); // 直接按节点的值的大小排下序 for (int i = 0; i < v.size(); i++) // 然后挨个丢出来,直到丢出k个元素为止 { k -= v[i].second; if (k <= 0) return v[i].first; } } void solve() { int n, A; std::cin >> n >> A; std::vector<int> a(n); for (int &x : a) std::cin >> x; int q; std::cin >> q; tr.insert(ChthollyNode(1, 1e9, -1)); for (int i = 0; i < q; i++) { int l, r; std::cin >> l >> r; // std::cout << l << ' ' << r << '\n'; assign(l, r, i + 1); } for (int i = 0; i < n; i++) { std::cout << kth(a[i], a[i], 1) << '\n'; } } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t = 1; // std::cin >> t; while (t--) { solve(); } }