AOJ DSL_2_B: Range Sum Query
解法
Binary Indexed Tree (Fenwick Tree) ライブラリ確認用
コード
#include <cstdio> #include <iostream> #include <sstream> #include <fstream> #include <iterator> #include <iomanip> #include <algorithm> #include <cmath> #include <string> #include <vector> #include <list> #include <queue> #include <stack> #include <set> #include <map> #include <bitset> #include <numeric> #include <limits> #include <climits> #include <cfloat> #include <functional> using namespace std; typedef long long ll; template <typename T> class FenwickTree { private: vector<T> bit; int M; public: FenwickTree(int M) : bit(vector<T>(M + 1, 0)), M(M) {} int sum(int i) { if (!i) return 0; return bit[i] + sum(i - (i & -i)); } void add(int i, T x) { if (i > M) return; bit[i] += x; add(i + (i & -i), x); } }; int main() { int N, Q; cin >> N >> Q; FenwickTree<int> fenwick(N); for (int i = 0; i < Q; ++i) { int c, x, y; cin >> c >> x >> y; if (c == 0) { fenwick.add(x, y); } else { if (x > y) swap(x, y); cout << (fenwick.sum(y) - fenwick.sum(x - 1)) << endl; } } }