結果
問題 | No.833 かっこいい電車 |
ユーザー |
![]() |
提出日時 | 2019-06-14 03:39:18 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 81 ms / 2,000 ms |
コード長 | 2,151 bytes |
コンパイル時間 | 1,784 ms |
コンパイル使用メモリ | 177,864 KB |
実行使用メモリ | 8,704 KB |
最終ジャッジ日時 | 2024-07-02 03:57:18 |
合計ジャッジ時間 | 4,021 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 30 |
ソースコード
#include <bits/stdc++.h>namespace DECLARATIONS {using namespace std;using ll = long long;using PI = pair<int, int>;template<class T> using V = vector<T>;using VI = V<int>;#define _1 first#define _2 second#ifdef MY_DEBUG# define DEBUG(x) x#else# define DEBUG(x)#endiftemplate<class T>inline void debug(T &A) {DEBUG(for (const auto &a : A) {cerr << a << " ";}cerr << '\n';)}template<class T>inline void debug_dim2(T &A) {DEBUG(for (const auto &as : A) {debug(as);})}template<typename ... Args>inline void debug(const char *format, Args const &... args) {DEBUG(fprintf(stderr, format, args ...);cerr << '\n';)}template<typename ... Args>string format(const std::string &fmt, Args ... args) {size_t len = std::snprintf(nullptr, 0, fmt.c_str(), args ...);std::vector<char> buf(len + 1);std::snprintf(&buf[0], len + 1, fmt.c_str(), args ...);return std::string(&buf[0], &buf[0] + len);}}using namespace DECLARATIONS;const int MOD = 1000000007;class BIT {public:int N;V<ll> bit;BIT(int n): N(n + 1), bit(N) {}void add(int i, int x) {i++;while(i < N) {bit[i] += x;i += i & -i;}}ll query(int i) {ll ans = 0ll;while(i) {ans += bit[i];i -= i & -i;}return ans;}};int main() {std::ios::sync_with_stdio(false);cin.tie(nullptr);int N, Q;cin >> N >> Q;BIT bit = BIT(N);for (int i = 0; i < N; ++i) {int a;cin >> a;bit.add(i, a);}set<int> dis;for (int i = 0; i <= N; ++i) {dis.insert(i);}for (int i = 0; i < Q; ++i) {int t, x;cin >> t >> x;x--;if (t == 1) {dis.erase(x + 1);} else if (t == 2) {dis.insert(x + 1);} else if (t == 3) {bit.add(x, 1);} else {auto r = dis.lower_bound(x + 1);auto l = prev(r);debug("[%d,%d)", *l, *r);ll v = bit.query(*r) - bit.query(*l);cout << v << '\n';}debug(dis);}return 0;}