This documentation is automatically generated by competitive-verifier/competitive-verifier
// competitive-verifier: PROBLEM https://onlinejudge.u-aizu.ac.jp/challenges/sources/UOA/UAPC/1549
// competitive-verifier: TLE 0.5
// competitive-verifier: MLE 64
#include <iostream>
#include <vector>
#include "src/DataStructure/WaveletMatrix.hpp"
using namespace std;
signed main() {
cin.tie(0);
ios::sync_with_stdio(0);
int N;
cin >> N;
vector<int> a(N);
for (int i= 0; i < N; i++) cin >> a[i];
WaveletMatrix wm(a);
int Q;
cin >> Q;
while (Q--) {
int l, r, d;
cin >> l >> r >> d, r++;
int cnt= wm.count(l, r, d);
if (cnt == 0) cout << wm.kth_smallest(l, r, 0) - d << '\n';
else if (cnt == r - l) {
cout << d - wm.kth_largest(l, r, 0) << '\n';
} else {
cout << min(wm.kth_smallest(l, r, cnt) - d, d - wm.kth_smallest(l, r, cnt - 1)) << '\n';
}
}
return 0;
}
#line 1 "test/aoj/1549.WM.test.cpp"
// competitive-verifier: PROBLEM https://onlinejudge.u-aizu.ac.jp/challenges/sources/UOA/UAPC/1549
// competitive-verifier: TLE 0.5
// competitive-verifier: MLE 64
#include <iostream>
#include <vector>
#line 3 "src/DataStructure/WaveletMatrix.hpp"
#include <algorithm>
#include <array>
#include <cassert>
template <class T> class WaveletMatrix {
struct SuccinctIndexableDictionary {
int len, blocks, zeros= 0;
std::vector<unsigned> bit, sum;
SuccinctIndexableDictionary(int len): len(len), blocks((len >> 5) + 1), bit(blocks, 0), sum(blocks, 0) {}
void set(int k) { bit[k >> 5]|= 1U << (k & 31); }
void build() {
for (int i= 1; i < blocks; ++i) sum[i]= sum[i - 1] + __builtin_popcount(bit[i - 1]);
zeros= rank0(len);
}
bool operator[](int k) const { return (bit[k >> 5] >> (k & 31)) & 1; }
int rank(int k) const { return (sum[k >> 5] + __builtin_popcount(bit[k >> 5] & ((1U << (k & 31)) - 1))); }
int rank0(int k) const { return k - rank(k); }
};
int len, lg;
std::vector<SuccinctIndexableDictionary> mat;
std::vector<T> vec;
public:
WaveletMatrix(const std::vector<T> &v): len(v.size()), lg(len ? 32 - __builtin_clz(len) : 1), mat(lg, SuccinctIndexableDictionary(len)), vec(v) {
std::sort(vec.begin(), vec.end()), vec.erase(std::unique(vec.begin(), vec.end()), vec.end());
std::vector<unsigned> cur(len), nex(len);
for (int i= len; i--;) cur[i]= std::lower_bound(vec.begin(), vec.end(), v[i]) - vec.begin();
for (auto h= lg; h--; cur.swap(nex)) {
for (int i= 0; i < len; ++i)
if ((cur[i] >> h) & 1) mat[h].set(i);
mat[h].build();
std::array it{nex.begin(), nex.begin() + mat[h].zeros};
for (int i= 0; i < len; ++i) *it[mat[h][i]]++= cur[i];
}
}
// k-th(0-indexed) smallest number in v[l,r)
T kth_smallest(int l, int r, int k) const {
assert(k < r - l);
int ret= 0;
for (auto h= lg; h--;)
if (auto l0= mat[h].rank0(l), r0= mat[h].rank0(r); k >= r0 - l0) k-= r0 - l0, ret|= 1 << h, l+= mat[h].zeros - l0, r+= mat[h].zeros - r0;
else l= l0, r= r0;
return vec[ret];
}
// k-th(0-indexed) largest number in v[l,r)
T kth_largest(int l, int r, int k) const { return kth_smallest(l, r, r - l - k - 1); }
// count i s.t. (l <= i < r) && (v[i] < ub)
int count(int l, int r, T ub) const {
unsigned x= std::lower_bound(vec.begin(), vec.end(), ub) - vec.begin();
if (x >= 1u << lg) return r - l;
if (x == 0) return 0;
int ret= 0;
for (auto h= lg; h--;)
if (auto l0= mat[h].rank0(l), r0= mat[h].rank0(r); (x >> h) & 1) ret+= r0 - l0, l+= mat[h].zeros - l0, r+= mat[h].zeros - r0;
else l= l0, r= r0;
return ret;
}
// count i s.t. (l <= i < r) && (lb <= v[i] < ub)
int count(int l, int r, T lb, T ub) const { return count(l, r, ub) - count(l, r, lb); }
};
#line 7 "test/aoj/1549.WM.test.cpp"
using namespace std;
signed main() {
cin.tie(0);
ios::sync_with_stdio(0);
int N;
cin >> N;
vector<int> a(N);
for (int i= 0; i < N; i++) cin >> a[i];
WaveletMatrix wm(a);
int Q;
cin >> Q;
while (Q--) {
int l, r, d;
cin >> l >> r >> d, r++;
int cnt= wm.count(l, r, d);
if (cnt == 0) cout << wm.kth_smallest(l, r, 0) - d << '\n';
else if (cnt == r - l) {
cout << d - wm.kth_largest(l, r, 0) << '\n';
} else {
cout << min(wm.kth_smallest(l, r, cnt) - d, d - wm.kth_smallest(l, r, cnt - 1)) << '\n';
}
}
return 0;
}
Env | Name | Status | Elapsed | Memory |
---|---|---|---|---|
g++-13 | testcase_00 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_01 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_02 |
![]() |
5 ms | 3 MB |
g++-13 | testcase_03 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_04 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_05 |
![]() |
5 ms | 3 MB |
g++-13 | testcase_06 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_07 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_08 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_09 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_10 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_11 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_12 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_13 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_14 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_15 |
![]() |
5 ms | 3 MB |
g++-13 | testcase_16 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_17 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_18 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_19 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_20 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_21 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_22 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_23 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_24 |
![]() |
5 ms | 3 MB |
g++-13 | testcase_25 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_26 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_27 |
![]() |
5 ms | 3 MB |
g++-13 | testcase_28 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_29 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_30 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_31 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_32 |
![]() |
5 ms | 3 MB |
g++-13 | testcase_33 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_34 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_35 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_36 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_37 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_38 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_39 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_40 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_41 |
![]() |
5 ms | 4 MB |
g++-13 | testcase_42 |
![]() |
5 ms | 3 MB |
g++-13 | testcase_43 |
![]() |
117 ms | 5 MB |
g++-13 | testcase_44 |
![]() |
118 ms | 5 MB |
g++-13 | testcase_45 |
![]() |
118 ms | 5 MB |
g++-13 | testcase_46 |
![]() |
118 ms | 5 MB |
g++-13 | testcase_47 |
![]() |
117 ms | 5 MB |
g++-13 | testcase_48 |
![]() |
118 ms | 5 MB |
g++-13 | testcase_49 |
![]() |
117 ms | 5 MB |
g++-13 | testcase_50 |
![]() |
118 ms | 5 MB |
g++-13 | testcase_51 |
![]() |
117 ms | 5 MB |
g++-13 | testcase_52 |
![]() |
119 ms | 5 MB |
g++-13 | testcase_53 |
![]() |
118 ms | 5 MB |
g++-13 | testcase_54 |
![]() |
117 ms | 5 MB |
g++-13 | testcase_55 |
![]() |
118 ms | 5 MB |
g++-13 | testcase_56 |
![]() |
119 ms | 5 MB |
g++-13 | testcase_57 |
![]() |
118 ms | 5 MB |
g++-13 | testcase_58 |
![]() |
35 ms | 4 MB |
g++-13 | testcase_59 |
![]() |
94 ms | 5 MB |
g++-13 | testcase_60 |
![]() |
74 ms | 4 MB |
g++-13 | testcase_61 |
![]() |
51 ms | 4 MB |
g++-13 | testcase_62 |
![]() |
104 ms | 5 MB |
g++-13 | testcase_63 |
![]() |
34 ms | 4 MB |
g++-13 | testcase_64 |
![]() |
101 ms | 5 MB |
g++-13 | testcase_65 |
![]() |
56 ms | 4 MB |
g++-13 | testcase_66 |
![]() |
81 ms | 4 MB |
g++-13 | testcase_67 |
![]() |
38 ms | 5 MB |
g++-13 | testcase_68 |
![]() |
54 ms | 4 MB |
g++-13 | testcase_69 |
![]() |
55 ms | 4 MB |
g++-13 | testcase_70 |
![]() |
89 ms | 4 MB |
g++-13 | testcase_71 |
![]() |
78 ms | 4 MB |
g++-13 | testcase_72 |
![]() |
23 ms | 4 MB |
g++-13 | testcase_73 |
![]() |
81 ms | 5 MB |
clang++-18 | testcase_00 |
![]() |
6 ms | 4 MB |
clang++-18 | testcase_01 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_02 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_03 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_04 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_05 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_06 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_07 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_08 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_09 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_10 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_11 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_12 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_13 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_14 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_15 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_16 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_17 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_18 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_19 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_20 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_21 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_22 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_23 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_24 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_25 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_26 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_27 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_28 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_29 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_30 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_31 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_32 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_33 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_34 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_35 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_36 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_37 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_38 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_39 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_40 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_41 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_42 |
![]() |
5 ms | 4 MB |
clang++-18 | testcase_43 |
![]() |
116 ms | 5 MB |
clang++-18 | testcase_44 |
![]() |
117 ms | 5 MB |
clang++-18 | testcase_45 |
![]() |
118 ms | 5 MB |
clang++-18 | testcase_46 |
![]() |
115 ms | 5 MB |
clang++-18 | testcase_47 |
![]() |
115 ms | 5 MB |
clang++-18 | testcase_48 |
![]() |
117 ms | 5 MB |
clang++-18 | testcase_49 |
![]() |
116 ms | 5 MB |
clang++-18 | testcase_50 |
![]() |
115 ms | 5 MB |
clang++-18 | testcase_51 |
![]() |
115 ms | 5 MB |
clang++-18 | testcase_52 |
![]() |
117 ms | 5 MB |
clang++-18 | testcase_53 |
![]() |
116 ms | 5 MB |
clang++-18 | testcase_54 |
![]() |
115 ms | 5 MB |
clang++-18 | testcase_55 |
![]() |
114 ms | 5 MB |
clang++-18 | testcase_56 |
![]() |
115 ms | 5 MB |
clang++-18 | testcase_57 |
![]() |
115 ms | 5 MB |
clang++-18 | testcase_58 |
![]() |
34 ms | 4 MB |
clang++-18 | testcase_59 |
![]() |
94 ms | 5 MB |
clang++-18 | testcase_60 |
![]() |
71 ms | 4 MB |
clang++-18 | testcase_61 |
![]() |
50 ms | 4 MB |
clang++-18 | testcase_62 |
![]() |
102 ms | 5 MB |
clang++-18 | testcase_63 |
![]() |
33 ms | 4 MB |
clang++-18 | testcase_64 |
![]() |
99 ms | 5 MB |
clang++-18 | testcase_65 |
![]() |
55 ms | 4 MB |
clang++-18 | testcase_66 |
![]() |
79 ms | 4 MB |
clang++-18 | testcase_67 |
![]() |
37 ms | 5 MB |
clang++-18 | testcase_68 |
![]() |
53 ms | 4 MB |
clang++-18 | testcase_69 |
![]() |
54 ms | 4 MB |
clang++-18 | testcase_70 |
![]() |
86 ms | 4 MB |
clang++-18 | testcase_71 |
![]() |
75 ms | 4 MB |
clang++-18 | testcase_72 |
![]() |
22 ms | 4 MB |
clang++-18 | testcase_73 |
![]() |
80 ms | 5 MB |