結果
問題 | No.1000 Point Add and Array Add |
ユーザー |
![]() |
提出日時 | 2020-04-27 15:51:47 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,632 bytes |
コンパイル時間 | 1,595 ms |
コンパイル使用メモリ | 172,532 KB |
実行使用メモリ | 17,408 KB |
最終ジャッジ日時 | 2024-11-21 20:03:20 |
合計ジャッジ時間 | 8,294 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 11 RE * 11 |
ソースコード
#include <bits/stdc++.h>#define rep(i, n) for (lli i = 0; i < (n); i++)#define rrep(i, n) for (lli i = (n)-1; i >= 0; i--)using namespace std;using lli = long long int;void YESNO(bool), YesNo(bool);template <class T1, class T2>bool chmin(T1 &l, const T2 &r);template <class T1, class T2>bool chmax(T1 &l, const T2 &r);template <class T>class bit{public:vector<T> dat;int n;bit(int n) : n(n) { dat.assign(n, 0); }bit(int n, T ini) : n(n) { dat.assign(n, ini); }// sum [0,i)T sum(int i){int ret = 0;for (--i; i >= 0; i = (i & (i + 1)) - 1)ret += dat[i];return ret;}// sum [i,j)T sum(int i, int j) { return sum(j) - sum(i); }// add x to ivoid add(int i, T x){for (; i < n; i |= i + 1)dat[i] += x;}};int main(){lli N, Q;cin >> N >> Q;vector<lli> A(N), X(Q), Y(Q);vector<string> C(N);rep(i, N) cin >> A[i];rep(i, Q) cin >> C[i] >> X[i] >> Y[i];bit<lli> bi(N + 1);vector<lli> B(N);rrep(i, Q){if (C[i] == "B"){X[i]--;bi.add(X[i], 1);bi.add(Y[i], -1);}else{X[i]--;B[X[i]] += Y[i] * bi.sum(X[i] + 1);}}rep(i, N){B[i] += A[i] * bi.sum(i + 1);}rep(i, N){cout << B[i] << " ";}}// -- libvoid YESNO(bool b) { cout << (b ? "YES" : "NO") << endl; }void YesNo(bool b) { cout << (b ? "Yes" : "No") << endl; }template <class T1, class T2>bool chmin(T1 &l, const T2 &r){return (l > r) ? (l = r, true) : false;}template <class T1, class T2>bool chmax(T1 &l, const T2 &r){return (l < r) ? (l = r, true) : false;}