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
AC × 3
AC × 23
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