結果
| 問題 |
No.1000 Point Add and Array Add
|
| コンテスト | |
| ユーザー |
kotamanegi
|
| 提出日時 | 2020-02-28 21:33:07 |
| 言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 259 ms / 2,000 ms |
| コード長 | 2,182 bytes |
| コンパイル時間 | 2,295 ms |
| コンパイル使用メモリ | 164,992 KB |
| 実行使用メモリ | 23,788 KB |
| 最終ジャッジ日時 | 2024-11-30 16:34:49 |
| 合計ジャッジ時間 | 7,043 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 22 |
コンパイルメッセージ
main.cpp:2:18: warning: '#pragma comment linker' ignored [-Wignored-pragmas]
2 | #pragma comment (linker, "/STACK:526000000")
| ^
1 warning generated.
ソースコード
#define _CRT_SECURE_NO_WARNINGS
#pragma comment (linker, "/STACK:526000000")
#include "bits/stdc++.h"
using namespace std;
typedef string::const_iterator State;
#define eps 1e-11L
#define MAX_MOD 1000000007LL
#define GYAKU 500000004LL
#define MOD 998244353LL
#define seg_size 262144
#define pb push_back
#define mp make_pair
typedef long long ll;
#define REP(a,b) for(long long (a) = 0;(a) < (b);++(a))
#define ALL(x) (x).begin(),(x).end()
unsigned long xor128() {
static unsigned long x = 123456789, y = 362436069, z = 521288629, w = time(NULL);
unsigned long t = (x ^ (x << 11));
x = y; y = z; z = w;
return (w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)));
}
void init() {
iostream::sync_with_stdio(false);
cout << fixed << setprecision(20);
}
#define int ll
ll seg_tree[seg_size * 4];
ll lazy_seg[seg_size * 4];
ll seg_find(int now, int n_l, int n_r, int w_l, int w_r, int settings) {
if (w_l <= n_l && n_r <= w_r) {
lazy_seg[now] += settings;
}
if (lazy_seg[now] != 0) {
seg_tree[now] += lazy_seg[now];
lazy_seg[now * 2] += lazy_seg[now];
lazy_seg[now * 2 + 1] += lazy_seg[now];
lazy_seg[now] = 0;
}
if (w_l <= n_l && n_r <= w_r) {
return seg_tree[now];
}
if (w_r <= n_l || n_r <= w_l) {
return 0;
}
return seg_find(now * 2, n_l, (n_l + n_r) / 2, w_l, w_r, settings) + seg_find(now * 2 + 1, (n_l + n_r) / 2, n_r, w_l, w_r, settings);
}
ll ans[300000];
void solve() {
int n, query;
cin >> n >> query;
vector<tuple<int, int, int>> queries;
REP(i, n) {
int a;
cin >> a;
queries.push_back(make_tuple(0, a, i));
}
REP(i, query) {
int b, c;
string a;
cin >> a >> b >> c;
b--; c--;
if (a == "A") {
queries.push_back(make_tuple(0, c + 1LL, b));
}
else {
queries.push_back(make_tuple(1, b, c));
}
}
reverse(ALL(queries));
REP(i, queries.size()) {
if (get<0>(queries[i]) == 1) {
seg_find(1, 0, seg_size, get<1>(queries[i]), get<2>(queries[i]) + 1, 1);
}
else {
ans[get<2>(queries[i])] += get<1>(queries[i]) * seg_find(1, 0, seg_size, get<2>(queries[i]), get<2>(queries[i]) + 1, 0);
}
}
REP(i, n) {
if (i != 0) cout << " ";
cout << ans[i];
}
cout << endl;
}
#undef int
int main() {
init();
solve();
}
kotamanegi