結果
| 問題 |
No.789 範囲の合計
|
| コンテスト | |
| ユーザー |
pockyny
|
| 提出日時 | 2023-01-09 17:23:11 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,985 bytes |
| コンパイル時間 | 709 ms |
| コンパイル使用メモリ | 72,020 KB |
| 最終ジャッジ日時 | 2025-02-10 01:25:42 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 WA * 14 |
ソースコード
#include <iostream>
using namespace std;
typedef long long ll;
struct dynamicSegtree{
ll e(){return 0;}
ll op(ll a,ll b){return a + b;}
struct node {
ll value;
node* left;
node* right;
node(ll value): value(value), left(nullptr), right(nullptr){}
};
int n;
node* root;
dynamicSegtree(int sz): n(sz), root(nullptr){}
void set(int pos,ll val){func_set(pos,val,root,0,n);}
void func_set(int pos,ll val,node* &t,int le,int ri){
if(!t) t = new node(e());
if(ri - le==1){
t->value += val;
return;
}
int mid = (le + ri)/2;
if(pos<mid) func_set(pos,val,t->left,le,mid);
else func_set(pos,val,t->right,mid,ri);
t->value = e();
if(t->left) t->value = op(t->left->value,t->value);
if(t->right) t->value = op(t->value,t->right->value);
}
ll get(int pos){return func_get(pos,root,0,n);}
ll func_get(int pos,node* &t,int le,int ri){
if(!t) return e();
if(ri - le==1) return t->value;
int mid = (le + ri)/2;
if(pos<mid) return func_get(pos,t->left,0,mid);
return func_get(pos,t->right,mid,ri);
}
ll prod(int le,int ri){return func_prod(le,ri,root,0,n);}
ll func_prod(int query_le,int query_ri,node* &t, int le,int ri){
if(!t || ri<=query_le || query_ri<=le) return e();
if(query_le<=le && ri<=query_ri) return t->value;
int mid = (le + ri)/2;
return op(func_prod(query_le,query_ri,t->left,le,mid),func_prod(query_le,query_ri,t->right,mid,ri));
}
};
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int i,q; cin >> q;
int n = 1000000001;
dynamicSegtree seg(n);
for(i=0;i<q;i++){
int t; cin >> t;
if(t==0){
ll x,y; cin >> x >> y;
seg.set(x,y);
}else{
int l,r; cin >> l >> r; l--;
cout << seg.prod(l,r) << "\n";
}
}
}
pockyny