結果
問題 | No.151 セグメントフィッシング |
ユーザー |
![]() |
提出日時 | 2015-10-26 21:18:26 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,468 bytes |
コンパイル時間 | 1,883 ms |
コンパイル使用メモリ | 175,620 KB |
実行使用メモリ | 8,192 KB |
最終ジャッジ日時 | 2024-09-13 11:40:35 |
合計ジャッジ時間 | 5,408 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 WA * 2 |
other | AC * 2 WA * 17 |
コンパイルメッセージ
main.cpp: In constructor ‘RBST::node::node(long long int)’: main.cpp:8:36: warning: ‘*this.RBST::node::sum’ is used uninitialized [-Wuninitialized] 8 | node(int val):val(val),sum(sum),cnt(1),lch(NULL),rch(NULL){} | ^~~
ソースコード
#include<bits/stdc++.h>using namespace std;#define int long longstruct RBST{struct node{node *lch,*rch;int val,sum,cnt;node(int val):val(val),sum(sum),cnt(1),lch(NULL),rch(NULL){}};node *root;RBST():root(NULL){}inline int count(node *t){return t?t->cnt:0;}inline int sum(node *t){return t?t->sum:0;}node *update(node *t){if(!t)return t;t->cnt=count(t->lch)+count(t->rch)+1;t->sum=sum(t->lch)+sum(t->rch)+t->val;return t;}node *merge(node *a,node *b){if(!a)return b;if(!b)return a;if(rand()%(count(a)+count(b))<count(a)){a->rch=merge(a->rch,b);return update(a);}else{b->lch=merge(a,b->lch);return update(b);}}pair<node *,node *>split(node *t,int k){if(!t)return make_pair(t,t);if(k<=count(t->lch)){pair<node *,node *>s=split(t->lch,k);t->lch=s.second;return make_pair(s.first,update(t));}else{pair<node *,node *>s=split(t->rch,k-count(t->lch)-1);t->rch=s.first;return make_pair(update(t),s.second);}}void insert(int k,int x){pair<node *,node *>s=split(root,k);root=merge(merge(s.first,new node(x)),s.second);}int erase(int k){pair<node *,node *>s1,s2;int ret;s1=split(root,k);s2=split(s1.second,1);ret=s2.first->val;root=merge(s1.first,s2.second);return ret;}int sum(int l,int r){pair<node *,node *>s1,s2;int ret;s1=split(root,l);s2=split(s1.second,r-l);ret=s2.first->sum;root=merge(merge(s1.first,s2.first),s2.second);return ret;}};int N,Q;RBST L,R;signed main(){cin>>N>>Q;for(int i=0;i<N;i++){L.insert(i,0);R.insert(i,0);}while(Q--){char type;int x,y;cin>>type>>x>>y;if(type=='L'){int val=L.erase(x);L.insert(x,val+y);}else if(type=='R'){int val=R.erase(x);R.insert(x,val+y);}else{cout<<L.sum(x,y)+R.sum(x,y)<<endl;}int l=L.erase(0);int r=R.erase(N-1);L.insert(N-1,r);R.insert(0,l);}return 0;}