結果
| 問題 |
No.789 範囲の合計
|
| コンテスト | |
| ユーザー |
tempura_pp
|
| 提出日時 | 2019-02-08 22:07:44 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 208 ms / 1,000 ms |
| コード長 | 2,096 bytes |
| コンパイル時間 | 803 ms |
| コンパイル使用メモリ | 92,580 KB |
| 実行使用メモリ | 34,560 KB |
| 最終ジャッジ日時 | 2024-07-01 11:32:43 |
| 合計ジャッジ時間 | 3,357 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 15 |
ソースコード
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<iomanip>
#include<math.h>
#include<complex>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<functional>
using namespace std;
#define REP(i,m,n) for(int i=(int)m ; i < (int) n ; ++i )
#define rep(i,n) REP(i,0,n)
typedef long long ll;
typedef pair<int,int> pint;
typedef pair<ll,int> pli;
const int inf=1e9+7;
const ll longinf=1LL<<60 ;
const ll mod=1e9+7 ;
template<typename T>
struct SegmentTree{
struct Node{
T val;
Node *lch,*rch;
Node(T val):val(val),lch(nullptr),rch(nullptr){}
};
Node *root;
ll sz;
T id;
T f(T x,T y){
//return max(x,y);
//return min(x,y);
return x+y;
//return {x.first*y.first, y.first*x.second + y.second};
}
T g(T x,T y){
//return x;
return x+y;
}
T val(Node* t){return t ? t->val : id;}
SegmentTree(ll sz_,T id_=0):root(nullptr),id(id_){
sz=1;
while(sz<sz_)sz*=2;
}
Node* update(Node* t,ll k, ll l, ll r, T x){
//assert(l<=k&&k<r);
if(!t)t=new Node(id);
if(r-l==1){
t->val=g(x,t->val);
return t;
}
if(k<(l+r)/2)t->lch=update(t->lch,k, l, (l+r)>>1, x);
else t->rch=update(t->rch,k, (l+r)>>1, r, x);
t->val=f(val(t->lch), val(t->rch));
return t;
}
T get(Node* t, ll a,ll b,ll l, ll r){
if(!t)return id;
if(b<=l||r<=a)return id;
if(a<=l&&r<=b)return t->val;
T lx=get(t->lch, a, b, l, (l+r)>>1);
T rx=get(t->rch, a, b, (l+r)>>1, r);
return f(lx,rx);
}
void update(ll k,T x){
root = update(root, k, 0, sz, x);
}
T get(ll a, ll b){
return get(root, a, b, 0, sz);
}
};
typedef pair<double,double> P;
int main(){
int n;
cin>>n;
SegmentTree<ll> sg(inf);
ll ans=0;
rep(i,n){
int a,b,c;
cin>>a>>b>>c;
if(a){
ans+=sg.get(b,c+1);
}
else {
sg.update(b,c);
}
}
cout<<ans<<endl;
return 0;
}
tempura_pp