Submission #38473188
Source Code Expand
#line 2 "/home/zawatin/compro/library/src/dataStructure/fenwick_multiset.hpp"
#line 2 "/home/zawatin/compro/library/src/utility/fenwick_tree/add.hpp"
namespace zawa {
template <class dat_type>
struct add_structure {
using T = dat_type;
static constexpr T id = T{};
static T add(const T& a, const T& b) {
return a + b;
}
static T inverse(const T& a) {
return -a;
}
};
} // namespace zawa
#line 2 "/home/zawatin/compro/library/src/dataStructure/fenwick_tree.hpp"
#include <vector>
namespace zawa {
template <class structure>
class fenwick_tree {
private:
using T = typename structure::T;
std::vector<T> dat;
int pow_two;
inline int lsb(int x) {
return x & -x;
}
T sum(int r) {
T res = 0;
while (r > 0) {
res = structure::add(res, dat[r]);
r -= lsb(r);
}
return res;
}
public:
fenwick_tree(std::size_t n) : dat(n + 1, structure::id), pow_two(std::__lg(n) + 1) {}
fenwick_tree(const std::vector<T>& A) : dat(A.size() + 1, structure::id), pow_two(std::__lg(A.size()) + 1) {
for (int i = 0 ; i < (int)A.size() ; i++) {
add(i, A[i]);
}
}
T sum(int l, int r) {
return structure::add(sum(r), structure::inverse(sum(l)));
}
void add(int pos, const T& v) {
pos++;
while (pos < (int)dat.size()) {
dat[pos] = structure::add(dat[pos], v);
pos += lsb(pos);
}
}
int lower_bound(T val) {
int res = 0;
T now = structure::id;
for (int x = (1 << pow_two) ; x > 0 ; x >>= 1) {
if (res + x < (int)dat.size()) {
T nxt = structure::add(now, dat[res + x]);
if (nxt < val) {
res += x;
now = nxt;
}
}
}
return res;
}
};
} // namespace zawa
#line 5 "/home/zawatin/compro/library/src/dataStructure/fenwick_multiset.hpp"
#line 7 "/home/zawatin/compro/library/src/dataStructure/fenwick_multiset.hpp"
#include <algorithm>
namespace zawa {
template <class T>
class fenwick_multiset {
private:
std::vector<T> dat;
fenwick_tree<add_structure<T>> fen;
public:
fenwick_multiset(std::size_t n) : dat(n), fen(n) {}
T count(int x) {
return dat[x];
}
T count(int l, int r) {
return fen.sum(l, r);
}
void insert(int x) {
dat[x] += 1;
fen.add(x, 1);
}
void insert(int x, const T& cnt) {
dat[x] += cnt;
fen.add(x, cnt);
}
T erase(int x) {
if (dat[x]) {
dat[x] -= 1;
fen.add(x, -1);
return 1;
}
else {
return 0;
}
}
T erase(int x, const T& cnt) {
T res = std::min(dat[x], cnt);
dat[x] -= res;
fen.add(x, -res);
return res;
}
int kth_element(const T& k) {
return fen.lower_bound(k);
}
};
} // namespace zawa
#line 2 "/home/zawatin/compro/library/src/template/accum1d.hpp"
#line 4 "/home/zawatin/compro/library/src/template/accum1d.hpp"
#include <numeric>
namespace zawa {
template <class T>
struct accum1d : std::vector<T> {
using vector = std::vector<T>;
accum1d() {
(*this).push_back(T());
}
accum1d(const std::vector<T>& A) {
(*this).push_back(T());
std::partial_sum(A.begin(), A.end(), std::back_inserter(*this));
}
template <class InputIterator>
accum1d(InputIterator begin, InputIterator end) {
(*this).push_back(T());
std::partial_sum(begin, end, std::back_inserter(*this));
}
T sum(std::size_t l, std::size_t r) {
return (*this)[r] - (*this)[l];
}
};
} // namespace zawa
#line 2 "/home/zawatin/compro/library/src/algorithm/compression.hpp"
#line 5 "/home/zawatin/compro/library/src/algorithm/compression.hpp"
namespace zawa {
template <class T>
class compression {
private:
std::vector<T> as;
std::vector<T> uniqued;
public:
compression(const std::vector<T>& as) : as(as), uniqued(as) {
std::sort(uniqued.begin(), uniqued.end());
uniqued.erase(std::unique(uniqued.begin(), uniqued.end()), uniqued.end());
}
int operator[](const T& val) {
return std::lower_bound(uniqued.begin(), uniqued.end(), val) - uniqued.begin();
}
int get(std::size_t i) {
return (*this)[as[i]];
}
std::size_t size() {
return uniqued.size();
}
};
} // namespace zawa
#line 4 "ARC075-E.test.cpp"
#include <iostream>
#line 7 "ARC075-E.test.cpp"
int main() {
int N, K; std::cin >> N >> K;
std::vector<long long> a(N);
for (auto& ai : a) {
std::cin >> ai;
ai -= K;
}
zawa::accum1d S(a);
zawa::compression comp(S);
zawa::fenwick_multiset<int> set(comp.size());
long long ans = 0LL;
for (auto s : S) {
ans += set.count(0, comp[s] + 1);
set.insert(comp[s]);
}
std::cout << ans << std::endl;
}
Submission Info
| Submission Time |
|
| Task |
E - Meaningful Mean |
| User |
zawatin |
| Language |
C++ (GCC 9.2.1) |
| Score |
600 |
| Code Size |
4613 Byte |
| Status |
AC |
| Exec Time |
96 ms |
| Memory |
11132 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
600 / 600 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
a01, a02, a03 |
| All |
a01, a02, a03, b04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23 |
| Case Name |
Status |
Exec Time |
Memory |
| a01 |
AC |
6 ms |
3532 KiB |
| a02 |
AC |
2 ms |
3576 KiB |
| a03 |
AC |
3 ms |
3504 KiB |
| b04 |
AC |
2 ms |
3520 KiB |
| b05 |
AC |
74 ms |
9476 KiB |
| b06 |
AC |
82 ms |
10980 KiB |
| b07 |
AC |
93 ms |
10152 KiB |
| b08 |
AC |
93 ms |
10100 KiB |
| b09 |
AC |
75 ms |
10952 KiB |
| b10 |
AC |
78 ms |
10940 KiB |
| b11 |
AC |
2 ms |
3476 KiB |
| b12 |
AC |
2 ms |
3568 KiB |
| b13 |
AC |
39 ms |
5928 KiB |
| b14 |
AC |
93 ms |
10940 KiB |
| b15 |
AC |
47 ms |
10268 KiB |
| b16 |
AC |
87 ms |
11056 KiB |
| b17 |
AC |
94 ms |
11132 KiB |
| b18 |
AC |
94 ms |
11020 KiB |
| b19 |
AC |
81 ms |
10892 KiB |
| b20 |
AC |
77 ms |
9536 KiB |
| b21 |
AC |
72 ms |
9536 KiB |
| b22 |
AC |
96 ms |
11124 KiB |
| b23 |
AC |
96 ms |
11128 KiB |