結果
| 問題 |
No.1000 Point Add and Array Add
|
| コンテスト | |
| ユーザー |
yakki
|
| 提出日時 | 2020-02-29 03:00:54 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 310 ms / 2,000 ms |
| コード長 | 1,488 bytes |
| コンパイル時間 | 1,512 ms |
| コンパイル使用メモリ | 122,304 KB |
| 最終ジャッジ日時 | 2025-01-09 03:30:42 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 22 |
ソースコード
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<bitset>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<deque>
#include<list>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<functional>
#include<cstdio>
#include<cstdlib>
#include<unordered_map>
#include<unordered_set>
using namespace std;
#define repr(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
#define rep(i, n) repr(i, 0, n)
#define INF 2e9
#define MOD 1000000007
//#define MOD 998244353
#define LINF (long long)4e18
#define jck 3.141592
#define PI acos(-1.0);
const double EPS = 1e-10;
using ll = long long;
using Pi = pair<int,int>;
using Pl = pair<ll,ll>;
template<typename T>
struct BIT{
vector<T> bit;
BIT(int sz){
bit.resize(sz);
}
void add(int k, T x){ //k番目にxを加える
for(int i = k; i < bit.size(); i |= i+1) bit[i] += x;
}
T sum(int k){ //[0,k)の区間の総和を求める
T res = 0;
for(int i = k-1; i >= 0; i = (i & (i+1))-1){
res += bit[i];
}
return res;
}
};
int main(){
int N,Q; cin >> N >> Q;
vector<ll> A(N);
rep(i,N) cin >> A[i];
vector<char> c(Q);
vector<int> x(Q),y(Q);
rep(i,Q) cin >> c[i] >> x[i] >> y[i];
BIT<int> bit(N+1);
vector<ll> ans(N);
for(int i = Q-1; i >= 0; i--){
x[i]--;
if(c[i] == 'A'){
ans[x[i]] += (ll)y[i]*(bit.sum(x[i]+1));
}
else{
bit.add(x[i],1);
bit.add(y[i],-1);
}
}
rep(i,N){
cout << ans[i]+(ll)A[i]*bit.sum(i+1) << " ";
}
cout << endl;
}
yakki