結果
| 問題 |
No.789 範囲の合計
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-02-08 22:37:03 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,479 bytes |
| コンパイル時間 | 830 ms |
| コンパイル使用メモリ | 88,908 KB |
| 実行使用メモリ | 11,136 KB |
| 最終ジャッジ日時 | 2024-07-01 11:39:16 |
| 合計ジャッジ時間 | 3,172 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 7 WA * 8 |
ソースコード
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
typedef long long ll;
struct BIT{
// 1-origin
vector<ll> v;
int n;
BIT(int _n):
v(vector<ll>(_n+1, 0)), n(_n) {}
ll sum(int i){
ll s = 0;
while(i > 0){
s += v[i];
i -= lsb(i);
}
return s;
}
ll sum(int l, int r){
return sum(r) - sum(l-1);
}
void add(int i, int x){
while(i <= n){
v[i] += x;
i += lsb(i);
}
}
private:
// least significant bit
int lsb(int i){
return i & -i;
}
};
int main(){
int n;
cin >> n;
set<int> s;
int a[n], b[n], c[n];
for(int i = 0; i < n; i++){
cin >> a[i] >> b[i] >> c[i];
if(a[i] == 0) s.insert(b[i]);
}
map<int,int> zip;
int cur = 1;
for(auto it = s.begin(); it != s.end(); it++){
zip[*it] = cur++;
}
BIT bit(zip.size()+1);
ll ans = 0;
for(int i = 0; i < n; i++){
if(a[i] == 0){
bit.add(zip[b[i]], c[i]);
}else if(a[i] == 1){
auto l = zip.lower_bound(b[i]);
if(l == zip.end()) continue;
auto r = zip.lower_bound(c[i]);
if(r == zip.end()) r--;
int le = (*l).second, ri = (*r).second;
if(le <= ri) ans += bit.sum(le, ri);
}
}
cout << ans << endl;
return 0;
}