답안 #377276

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
377276 2021-03-13T15:52:00 Z ACmachine Sterilizing Spray (JOI15_sterilizing) C++17
100 / 100
261 ms 8856 KB
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

template<typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template<typename T, typename U> using ordered_map = tree<T, U, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

typedef long long ll;
typedef long double ld;

typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

typedef vector<int> vi;
typedef vector<ll> vll;

#define FOR(i,j,k,in) for(int i=(j); i < (k);i+=in)
#define FORD(i,j,k,in) for(int i=(j); i >=(k);i-=in)
#define REP(i,b) FOR(i,0,b,1)
#define REPD(i,b) FORD(i,b,0,1)
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define all(x) begin(x), end(x)
#define MANY_TESTS int tcase; cin >> tcase; while(tcase--)

const double EPS = 1e-9;
const int MOD = 1e9+7;
const ll INFF = 1e18;
const int INF = 1e9;
const ld PI = acos((ld)-1);
const vi dy = {1, 0, -1, 0, -1, 1, 1, -1};
const vi dx = {0, 1, 0, -1, -1, 1, -1, 1};

void DBG(){cout << "]" << endl;}
template<typename T, typename ...U> void DBG(const T& head, const U... args){ cout << head << "; "; DBG(args...); }
#define dbg(...) cout << "Line(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__);
#define chk() cout << "Check at line(" << __LINE__ << ") hit." << endl;

template<class T, unsigned int U>
ostream& operator<<(ostream& out, const array<T, U> &v){out << "[";  REP(i, U) out << v[i] << ", ";  out << "]"; return out;}
template <class T, class U>
ostream& operator<<(ostream& out, const pair<T, U> &par) {out << "[" << par.first << ";" << par.second << "]"; return out;}
template <class T>
ostream& operator<<(ostream& out, const set<T> &cont) { out << "{"; for( const auto &x:cont) out << x << ", "; out << "}"; return out; }
template <class T, class U>
ostream& operator<<(ostream& out, const map<T, U> &cont) {out << "{"; for( const auto &x:cont) out << x << ", "; out << "}"; return out; }
template<class T>
ostream& operator<<(ostream& out, const vector<T> &v){ out << "[";  REP(i, v.size()) out << v[i] << ", ";  out << "]"; return out;}

template<class T>
istream& operator>>(istream& in, vector<T> &v){ for(auto &x : v) in >> x; return in; }

template<typename T>
struct fenwick{
    vector<T> tree;
    int n;
    fenwick(){}
    fenwick(int _n) {
        n = _n;
        tree.resize(n+1, 0);
    }
    void update(int x, T val){
        ++x;
        while(x <= n){
            tree[x] += val;
            x += (x & -x);
        }
    }
    T pref_query(int x){ // query 0 .. x], ++x because BIT is indexed from 1 internally
        ++x;
        T res = 0;
        while(x > 0){
            res += tree[x];
            x -= (x & -x);
        }
        return res;
    }
    T query(int l, int r){ // query [l, r)
        return pref_query(--r) - pref_query(--l);
    }
};

int main(){
 	ios_base::sync_with_stdio(false);
 	cin.tie(NULL); cout.tie(NULL);
    int n, q, k;
    cin >> n >> q >> k;
    set<int> nonzero;
    fenwick<ll> ft(n);
    REP(i, n){
        int c;
        cin >> c;
        if(c != 0) nonzero.insert(i);
        ft.update(i, c);
    }
    REP(i, q){
        int s, t, u;
        cin >> s >> t >> u;
        if(s == 1){
            t--;
            if(u == 0)
                nonzero.erase(t);
            else
                nonzero.insert(t);
            int curr = ft.query(t, t + 1);
            ft.update(t, u - curr);
        }
        else if(s == 2){
            if(k == 1) continue;
            t--;
            auto it = nonzero.lower_bound(t);
            while(true){
                if(it == nonzero.end() || *it >= u)
                    break;
                int curr = ft.query(*it, *it + 1);
                int nxt = curr / k;
                ft.update(*it, -curr + nxt);
                auto nxt_it = it; nxt_it++;
                if(nxt == 0) nonzero.erase(it);
                it = nxt_it;
            }
        }
        else{
            t--;
            cout << ft.query(t, u) << "\n";
        }
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 2 ms 492 KB Output is correct
4 Correct 4 ms 492 KB Output is correct
5 Correct 5 ms 620 KB Output is correct
6 Correct 4 ms 620 KB Output is correct
7 Correct 5 ms 620 KB Output is correct
8 Correct 5 ms 620 KB Output is correct
9 Correct 5 ms 640 KB Output is correct
10 Correct 4 ms 620 KB Output is correct
11 Correct 5 ms 620 KB Output is correct
12 Correct 4 ms 620 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 65 ms 4588 KB Output is correct
2 Correct 49 ms 4204 KB Output is correct
3 Correct 57 ms 6508 KB Output is correct
4 Correct 77 ms 8452 KB Output is correct
5 Correct 91 ms 8812 KB Output is correct
6 Correct 88 ms 8812 KB Output is correct
7 Correct 93 ms 8812 KB Output is correct
8 Correct 90 ms 8856 KB Output is correct
9 Correct 85 ms 8684 KB Output is correct
10 Correct 87 ms 8684 KB Output is correct
11 Correct 86 ms 8684 KB Output is correct
12 Correct 87 ms 8684 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 1004 KB Output is correct
2 Correct 16 ms 2028 KB Output is correct
3 Correct 20 ms 2304 KB Output is correct
4 Correct 38 ms 1516 KB Output is correct
5 Correct 60 ms 3948 KB Output is correct
6 Correct 58 ms 3948 KB Output is correct
7 Correct 79 ms 4936 KB Output is correct
8 Correct 60 ms 4972 KB Output is correct
9 Correct 55 ms 4836 KB Output is correct
10 Correct 55 ms 4844 KB Output is correct
11 Correct 56 ms 4844 KB Output is correct
12 Correct 57 ms 4844 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 81 ms 3692 KB Output is correct
2 Correct 87 ms 3820 KB Output is correct
3 Correct 115 ms 3308 KB Output is correct
4 Correct 98 ms 2796 KB Output is correct
5 Correct 145 ms 6508 KB Output is correct
6 Correct 161 ms 6636 KB Output is correct
7 Correct 135 ms 6508 KB Output is correct
8 Correct 195 ms 6508 KB Output is correct
9 Correct 166 ms 6508 KB Output is correct
10 Correct 190 ms 6636 KB Output is correct
11 Correct 149 ms 6636 KB Output is correct
12 Correct 261 ms 6508 KB Output is correct