結果
| 問題 |
No.789 範囲の合計
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-05-04 17:26:04 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 63 ms / 1,000 ms |
| コード長 | 1,960 bytes |
| コンパイル時間 | 1,720 ms |
| コンパイル使用メモリ | 175,420 KB |
| 実行使用メモリ | 5,500 KB |
| 最終ジャッジ日時 | 2024-06-23 03:05:55 |
| 合計ジャッジ時間 | 3,139 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 15 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
// SegmentTree on range sum, single value modification.
template<typename T>
class SegTreeSum{
size_t n;
vector<T> data;
public:
SegTreeSum(size_t _n): n(_n), data(2 * _n, 0) {}
SegTreeSum(const vector<T> &src): n(src.size()), data(2 * n, 0) {init(src);}
void init(const vector<T> &src){
for (size_t i = 0; i != n; ++i) data[n + i] = src[i];
for (size_t i = n - 1; i != 0; --i) data[i] = data[i*2] + data[i*2+1];
}
void modify(size_t i, T v){ // set value at index i to v.
for (data[i += n] = v; i > 1; i >>= 1) data[i>>1] = data[i] + data[i^1];
}
void add(size_t i, T v){
modify(i, v + data[i + n]);
}
T query(size_t L, size_t R){ // sum on interval [L, R)
T ret = 0;
for (L += n, R += n; L < R; L >>= 1, R >>= 1){
if (L & 1) ret += data[L++];
if (R & 1) ret += data[--R];
}
return ret;
}
};
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
int n;
cin >> n;
vector<int> q(n, 0);
vector<int> a(n, 0);
vector<int> b(n, 0);
for (int i = 0; i < n; ++i) cin >> q[i] >> a[i] >> b[i];
vector<int> xs = {-1};
for (int i = 0; i < n; ++i) if (q[i] == 0) xs.push_back(a[i]);
xs.push_back(1e9+1);
sort(xs.begin(), xs.end());
auto xsend = unique(xs.begin(), xs.end());
int N = xsend - xs.begin();
if (N == 2){
cout << 0 << endl;
return 0;
}
SegTreeSum<int> seg(N);
long long ans = 0;
for (int i = 0; i < n; ++i){
if (q[i] == 0){
int x = lower_bound(xs.begin(), xsend, a[i]) - xs.begin();
seg.add(x, b[i]);
}else{
int L = lower_bound(xs.begin(), xsend, a[i]) - xs.begin();
int R = upper_bound(xs.begin(), xsend, b[i]) - xs.begin();
ans += seg.query(L, R);
}
}
cout << ans << endl;
return 0;
}