Submission #52230
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | //#include<bits/stdc++.h> #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <vector> #include <queue> #include <map> #include <algorithm> #include <utility> #include <functional> #include <climits> #define REP(i, n) for(int i = 0; i < n; ++i) #define FOR(i, a, b) for(int i = a; i < b; ++i) #define F first #define S second #define OUT(x) cout << x << "\n" #define int long long using namespace std; using point = pair< int , int >; template < class T > class Segment { // 0-indexed // parent : (n - 1) / 2 // left : 2 * n + 1 // right : 2 * n + 2 int size; T inf; function< T(T, T) > f; vector< T > data; public : Segment( int size, T val, T inf, function< T(T, T) > f) : inf(inf), f(f) { int _n = 1; while (_n < size) { _n *= 2; } this -> size = _n; data.resize(_n * 2 - 1, inf); } // 値の更新 void update( int p, T v) { p += size - 1; data[p] = v; while (p > 0) { p = (p - 1) / 2; data[p] = f(data[2 * p + 1], data[2 * p + 2]); } return ; } void add( int p, T v) { p += size - 1; data[p] += v; while (p > 0) { p = (p - 1) / 2; data[p] = f(data[2 * p + 1], data[2 * p + 2]); } return ; } // [a, b)に対するクエリ // usage : query(a, b, 0, 0, n); T query( int a, int b, int p, int l, int r) { if (b <= l || r <= a) return inf; else if (a <= l && r <= b) return data[p]; else { T lv = query(a, b, 2 * p + 1, l, (l + r) / 2); T rv = query(a, b, 2 * p + 2, (l + r) / 2, r); return f(lv, rv); } } T query( int a, int b) { return query(a, b, 0, 0, size); } }; signed main() { int n, q; cin >> n >> q; Segment< int > tree(n + 1, 0, 0, []( int a, int b) { return a + b; }); int s, a, b; REP (i, q) { scanf ( "%lld%lld%lld" , &s, &a, &b); if (s) { OUT(tree.query(a, b + 1)); } else { tree.add(a, b); } } return 0; } |
ステータス
項目 | データ |
---|---|
問題 | 0649 - 区間和(セグ木、BIT練習) |
ユーザー名 | Wonder /*ei1741*/ |
投稿日時 | 2019-08-01 12:17:12 |
言語 | C++14 |
状態 | Accepted |
得点 | 5 |
ソースコード長 | 2306 Byte |
最大実行時間 | 387 ms |
最大メモリ使用量 | 104980 KB |
セット
セット | 得点 | Cases | |
---|---|---|---|
1 | ALL | 5 / 5 | * |
テストケース
ファイル名 | 状態 | 実行時間 | メモリ使用量 | # |
---|---|---|---|---|
input100-1 | AC | 50 ms | 984 KB |
1
|
input100-2 | AC | 56 ms | 1840 KB |
1
|
input100-3 | AC | 119 ms | 4236 KB |
1
|
input100-4 | AC | 203 ms | 8940 KB |
1
|
input100-5 | AC | 298 ms | 16072 KB |
1
|
input1000-1 | AC | 117 ms | 18212 KB |
1
|
input1000-2 | AC | 236 ms | 23288 KB |
1
|
input1000-3 | AC | 121 ms | 25544 KB |
1
|
input1000-4 | AC | 311 ms | 31900 KB |
1
|
input1000-5 | AC | 108 ms | 33648 KB |
1
|
input10000-1 | AC | 306 ms | 39620 KB |
1
|
input10000-2 | AC | 337 ms | 45992 KB |
1
|
input10000-3 | AC | 261 ms | 50820 KB |
1
|
input10000-4 | AC | 307 ms | 56292 KB |
1
|
input10000-5 | AC | 162 ms | 59204 KB |
1
|
input100000-1 | AC | 378 ms | 67492 KB |
1
|
input100000-2 | AC | 79 ms | 68360 KB |
1
|
input100000-3 | AC | 80 ms | 69352 KB |
1
|
input100000-4 | AC | 211 ms | 72644 KB |
1
|
input100000-5 | AC | 337 ms | 78380 KB |
1
|
input1000000-1 | AC | 66 ms | 93328 KB |
1
|
input1000000-2 | AC | 185 ms | 95472 KB |
1
|
input1000000-3 | AC | 212 ms | 97876 KB |
1
|
input1000000-4 | AC | 387 ms | 102840 KB |
1
|
input1000000-5 | AC | 196 ms | 104980 KB |
1
|
input1001000-1 | AC | 23 ms | 88560 KB |
1
|
input1001000-2 | AC | 18 ms | 88528 KB |
1
|
input1001000-3 | AC | 21 ms | 88492 KB |
1
|
input1001000-4 | AC | 20 ms | 88460 KB |
1
|
input1001000-5 | AC | 28 ms | 88556 KB |
1
|