Submission #377273

# Submission time Handle Problem Language Result Execution time Memory
377273 2021-03-13T15:51:00 Z ACmachine Sterilizing Spray (JOI15_sterilizing) C++17
80 / 100
5000 ms 8684 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){
            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;
}
# Verdict Execution time Memory Grader output
1 Correct 2 ms 364 KB Output is correct
2 Correct 3 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 748 KB Output is correct
7 Correct 5 ms 640 KB Output is correct
8 Correct 5 ms 620 KB Output is correct
9 Correct 5 ms 620 KB Output is correct
10 Correct 4 ms 620 KB Output is correct
11 Correct 5 ms 640 KB Output is correct
12 Correct 5 ms 620 KB Output is correct
# Verdict Execution time Memory Grader output
1 Execution timed out 5029 ms 4728 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 15 ms 1004 KB Output is correct
2 Correct 16 ms 2028 KB Output is correct
3 Correct 20 ms 2196 KB Output is correct
4 Correct 39 ms 2412 KB Output is correct
5 Correct 60 ms 4976 KB Output is correct
6 Correct 59 ms 4972 KB Output is correct
7 Execution timed out 5034 ms 4236 KB Time limit exceeded
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 86 ms 4948 KB Output is correct
2 Correct 87 ms 5200 KB Output is correct
3 Correct 125 ms 4204 KB Output is correct
4 Correct 94 ms 4076 KB Output is correct
5 Correct 143 ms 8684 KB Output is correct
6 Correct 201 ms 8684 KB Output is correct
7 Correct 150 ms 8556 KB Output is correct
8 Correct 219 ms 8684 KB Output is correct
9 Correct 167 ms 8428 KB Output is correct
10 Correct 189 ms 8428 KB Output is correct
11 Correct 150 ms 8428 KB Output is correct
12 Correct 259 ms 8556 KB Output is correct