Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- typedef unsigned long ui;
- typedef long long ll;
- #define endl '\n'
- #define cout cout
- template <class A> void W (A h) { cout << h << endl; }
- template <class A, class... B> void W (A h, B... t) { cout << h << ' '; W(t...); }
- template <class A> void R (A& h) { cin >> h; }
- template <class A, class... B> void R (A& h, B... t) { cin >> h; R(t...); }
- namespace seg {
- const ll MaxN(1019), NE(0);
- ll ARR[MaxN], VAL[4*MaxN], ADD[4*MaxN]; ui LB[4*MaxN], RB[4*MaxN];
- ll f (ll a, ll b) { return a + b; }
- void build (ui v, ui lb, ui rb) {
- LB[v] = lb, RB[v] = rb; ui mb = (lb + rb) / 2;
- if (lb == rb) { VAL[v] = ARR[lb]; return; }
- ui l = 2*v, r = l + 1;
- build(l, lb, mb); build(r, mb+1, rb);
- VAL[v] = f(VAL[l], VAL[r]);
- }
- ll get (ui v, ui ql, ui qr) {
- ui lb = LB[v], rb = RB[v], mb = (lb + rb) / 2,
- l = 2*v, r = l + 1; ll ret = NE;
- W("Get:", v, ql, qr);
- if (lb == ql && rb == qr) return VAL[v];
- else if (ql > qr) return ret;
- else {
- if (qr > mb) ret = f(ret, get(r, max(ql, mb+1), min(qr, rb) ));
- if (ql <= mb) ret = f(ret, get(l, max(ql, lb), min(qr, mb) ));
- return ret;
- }
- }
- void update (ui v, ui add) {
- if (LB[v] == RB[v]) ARR[LB[v]] += add;
- while (v) VAL[v] += add, v >>= 1;
- }
- }
- template <class It> void read_it (It b, It e)
- { for (It i(b); i != e; ++i) cin>>*i; }
- template <class It> void write_it (It b, It e)
- { for (It i(b); i != e; ++i) cout<<*i<<' '; }
- ll n;
- void read () {
- using namespace seg;
- ios::sync_with_stdio(0); // cin.tie(0);
- R(n); read_it(ARR, ARR + n);
- build(1, 0, n - 1);
- write_it(VAL, VAL + 4*n);
- }
- int main () {
- read();
- ll f, t;
- while (cin>>f>>t)
- W( seg::get(1, f, t) );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement