結果
| 問題 |
No.151 セグメントフィッシング
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-02-13 02:36:52 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 36 ms / 5,000 ms |
| コード長 | 1,478 bytes |
| コンパイル時間 | 1,334 ms |
| コンパイル使用メモリ | 163,276 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-23 19:40:34 |
| 合計ジャッジ時間 | 2,435 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 19 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> VI;
typedef vector<VI> VVI;
#define REP(i, n) for(int(i)=0;(i)<(n);++(i))
#define FOR(i, f, t) for(int(i)=(f);(i)<(t);(++i))
#define RREP(i, n) for(int(i)=(n)-1;(i)>=0;--(i))
const int MOD = int(1e9+7);
// 0-index BIT
template<class _T>struct BIT{
int N;vector<_T>bit;
BIT(int n):N(n),bit(n+1){}
void add(int i,_T v){i++;for(int x=i;x<=N;x+=x&-x)bit[x]+=v;}
_T sum(int i){i++;_T r=0;for(int x=i;x>0;x-=x&-x)r+=bit[x];return r;}
_T sum(int l,int r){return l<=r?sum(r)-sum(l-1):sum(r)+sum(l,N-1);}
_T get(int i){return sum(i)-sum(i-1);}
void set(int i,_T v){add(i,v-get(i));}
};
int N,Q,N2;
BIT<ll> l(44444), r(44444);
int fix(int n){ return (n % N2 + N2) % N2; }
int main(){
do { cin.tie(0); ios_base::sync_with_stdio(false); } while(0);
cin >> N >> Q;
N2 = N * 2;
REP(i,Q){
int t = i+1;
char x; int y,z; cin >> x >> y >> z;
if(x == 'L'){
l.add(fix(y+t), z);
} else if(x == 'R'){
r.add(fix(y-t), z);
} else {
z--;
ll res = 0;
res += l.sum(fix(y+t), fix(z+t));
res += l.sum(fix(N2-1-z+t), fix(N2-1-y+t));
res += r.sum(fix(y-t), fix(z-t));
res += r.sum(fix(N2-1-z-t), fix(N2-1-y-t));
cout << res << endl;
}
}
return 0;
}