結果

問題 No.1000 Point Add and Array Add
コンテスト
ユーザー Hydrogen332
提出日時 2026-01-12 01:01:15
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
結果
AC  
実行時間 99 ms / 2,000 ms
コード長 1,122 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 3,205 ms
コンパイル使用メモリ 339,756 KB
実行使用メモリ 9,728 KB
最終ジャッジ日時 2026-01-12 01:01:24
合計ジャッジ時間 7,184 ms
ジャッジサーバーID
(参考情報)
judge6 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, s, e) for (int i = (int)(s); i < (int)(e); ++i)

template<typename T>
struct FenwickTree {
	vector<T> data;
	FenwickTree(int size) : data(size + 1, 0) {}
	
	void add(int k, T x) {
		for (++k; k < data.size(); k += k & -k) data[k] += x;
	}
	
	T sum(int k) { // [0, a]
		if (k < 0) return 0;
		T res = 0;
		for (++k; k > 0; k -= k & -k) res += data[k];
		return res;
	}
	
	T sum(int l, int r) { // [l, r]
		return sum(r) - sum(l - 1);
	}
};

int main() {
	cin.tie(nullptr);
	ios_base::sync_with_stdio(false);
	
	int N, Q;
	cin >> N >> Q;
	vector<ll> A(N);
	rep(i, 0, N) cin >> A[i];
	
	vector<char> c(Q);
	vector<int> x(Q), y(Q);
	rep(i, 0, Q) cin >> c[i] >> x[i] >> y[i];
	
	FenwickTree<ll> fw(N);
	vector<ll> ans(N);
	
	for (int i = Q - 1; i >= 0; --i) {
		if (c[i] == 'A') {
			--x[i];
			
			ans[x[i]] += fw.sum(x[i]) * y[i];
		} else {
			--x[i], --y[i];
			
			fw.add(x[i], 1);
			if (y[i] != N - 1) fw.add(y[i] + 1, -1);
		}
	}
	
	rep(i, 0, N) ans[i] += fw.sum(i) * A[i];
	
	rep(i, 0, N) cout << ans[i] << (i == N - 1 ? '\n' : ' ');
}
0