Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <functional>
- #include <vector>
- #include <algorithm>
- #include <cmath>
- using ll = long long;
- using ld = long double;
- template<typename T>
- using vc = std::vector<T>;
- template<typename T>
- using mt = vc<vc<T>>;
- struct segtree {
- private:
- vc<ll> d;
- constexpr static ll neutral = 0;
- void build(const vc<ll>& a, ll v, ll tl, ll tr) {
- if (tl == tr) {
- d[v] = a[tl];
- }
- else {
- ll mid = (tl + tr) / 2;
- build(a, v * 2, tl, mid);
- build(a, v * 2 + 1, mid + 1, tr);
- d[v] = d[v * 2] + d[v * 2 + 1];
- }
- }
- public:
- segtree (const vc<ll>& na) : d(na.size() * 4) {
- build(na, 1, 0, na.size() - 1);
- }
- ll query (ll v, ll tl, ll tr, ll l, ll r) {
- if (l > r) {
- return neutral;
- }
- if (l == tl && r == tr) {
- return d[v];
- }
- ll mid = (tl + tr) / 2;
- return query(v * 2, tl, mid, l, std::min(r, mid)) + query(v * 2 + 1, mid + 1, tr, std::max(l, mid + 1), r);
- }
- void update (ll i, ll x, ll v, ll tl, ll tr) {
- if (tl == tr) {
- d[v] = x;
- }
- else {
- ll mid = (tl + tr) / 2;
- if (i <= mid) {
- update(i, x, v * 2, tl, mid);
- }
- else {
- update(i, x, v * 2 + 1, mid + 1, tr);
- }
- d[v] = d[v * 2] + d[v * 2 + 1];
- }
- }
- vc<ll> debug () {
- return d;
- }
- };
- int main () {
- ll n;
- std::cin >> n;
- vc<std::pair<ll, ll>> crd;
- vc<char> type;
- ll a, b, c;
- while (true) {
- std::cin >> a;
- if (a == 0) {
- break;
- }
- else {
- std::cin >> b >> c;
- }
- crd.push_back(std::make_pair(b, c));
- type.push_back(a);
- }
- segtree rsq(vc<ll>(n, 0));
- for (int i = 0; i < crd.size(); ++i) {
- if (type[i] == 1) {
- //rsq.update(crd[i].first - 1, crd[i].second);
- rsq.update(crd[i].first - 1, crd[i].second, 1, 0, n - 1);
- }
- else {
- //std::cout << "yes\n";
- std::cout << rsq.query(1, 0, n - 1, crd[i].first - 1, crd[i].second - 1);
- std::cout << " ";
- }
- }
- vc<ll> db = rsq.debug();
- std::cout << "\n";
- for (const auto& i : db) {
- std::cout << i << " ";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement