結果
問題 | No.59 鉄道の旅 |
ユーザー |
|
提出日時 | 2021-08-07 15:17:05 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 17 ms / 5,000 ms |
コード長 | 4,605 bytes |
コンパイル時間 | 1,935 ms |
コンパイル使用メモリ | 196,900 KB |
最終ジャッジ日時 | 2025-01-23 16:40:27 |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 12 |
ソースコード
#include <bits/stdc++.h>using namespace std;namespace atcoder {namespace internal {#ifndef _MSC_VERtemplate <class T>using is_signed_int128 =typename std::conditional<std::is_same<T, __int128_t>::value ||std::is_same<T, __int128>::value,std::true_type,std::false_type>::type;template <class T>using is_unsigned_int128 =typename std::conditional<std::is_same<T, __uint128_t>::value ||std::is_same<T, unsigned __int128>::value,std::true_type,std::false_type>::type;template <class T>using make_unsigned_int128 =typename std::conditional<std::is_same<T, __int128_t>::value,__uint128_t,unsigned __int128>;template <class T>using is_integral = typename std::conditional<std::is_integral<T>::value ||is_signed_int128<T>::value ||is_unsigned_int128<T>::value,std::true_type,std::false_type>::type;template <class T>using is_signed_int = typename std::conditional<(is_integral<T>::value&&std::is_signed<T>::value) ||is_signed_int128<T>::value,std::true_type,std::false_type>::type;template <class T>using is_unsigned_int =typename std::conditional<(is_integral<T>::value&&std::is_unsigned<T>::value) ||is_unsigned_int128<T>::value,std::true_type,std::false_type>::type;template <class T>using to_unsigned = typename std::conditional<is_signed_int128<T>::value,make_unsigned_int128<T>,typename std::conditional<std::is_signed<T>::value,std::make_unsigned<T>,std::common_type<T>>::type>::type;#elsetemplate <class T> using is_integral = typename std::is_integral<T>;template <class T>using is_signed_int =typename std::conditional<is_integral<T>::value&& std::is_signed<T>::value,std::true_type,std::false_type>::type;template <class T>using is_unsigned_int =typename std::conditional<is_integral<T>::value&&std::is_unsigned<T>::value,std::true_type,std::false_type>::type;template <class T>using to_unsigned = typename std::conditional<is_signed_int<T>::value,std::make_unsigned<T>,std::common_type<T>>::type;#endiftemplate <class T>using is_signed_int_t = std::enable_if_t<is_signed_int<T>::value>;template <class T>using is_unsigned_int_t = std::enable_if_t<is_unsigned_int<T>::value>;template <class T> using to_unsigned_t = typename to_unsigned<T>::type;} // namespace internal} // namespace atcodernamespace atcoder {// Reference: https://en.wikipedia.org/wiki/Fenwick_treetemplate <class T> struct fenwick_tree {using U = internal::to_unsigned_t<T>;public:fenwick_tree() : _n(0) {}explicit fenwick_tree(int n) : _n(n), data(n) {}void add(int p, T x) {assert(0 <= p && p < _n);p++;while (p <= _n) {data[p - 1] += U(x);p += p & -p;}}T sum(int l, int r) {assert(0 <= l && l <= r && r <= _n);return sum(r) - sum(l);}private:int _n;std::vector<U> data;U sum(int r) {U s = 0;while (r > 0) {s += data[r - 1];r -= r & -r;}return s;}};} // namespace atcoderusing namespace atcoder;int main(void){cin.tie(0);ios::sync_with_stdio(false);int n, k, t;vector <int> v;cin >> n >> k;for (int i = 0; i < n; i++){cin >> t;v.push_back(t);}fenwick_tree<int> tree(1000001);for (int i = 0; i < n; i++){if (v[i] < 0){int val = tree.sum(abs(v[i]), abs(v[i]) + 1);if (val > 0){tree.add(abs(v[i]), -1);}}else{int val = tree.sum(abs(v[i]), 1000001);if (val < k){tree.add(abs(v[i]), 1);}}}cout << tree.sum(0, 1000001) << '\n';return 0;}