This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "bits/stdc++.h"
using namespace std;
const int mxn = 3e5 + 10;
const int inf = 1e6;
int diff[mxn];
int n, k, m;
vector<int> st, rp, lz;
const char nl = '\n';
void app(int x, int v) {
st[x] += v;
lz[x] += v;
}
void push(int x) {
if(x < m && lz[x] != 0) {
app(2*x, lz[x]);
app(2*x + 1, lz[x]);
}
lz[x] = 0;
}
void kill(int x = 1, int lx = 0, int rx = m - 1) {
if(st[x] < 0) return;
push(x);
if(lx == rx) {
st[x] = -inf;
rp[x] = 1;
return;
}
int d = (lx + rx) / 2;
kill(2*x, lx, d);
kill(2*x + 1, d + 1, rx);
st[x] = max(st[2*x], st[2*x + 1]);
rp[x] = rp[2*x] + rp[2*x + 1];
}
void mod(int l, int r, int v = 1, int x = 1, int lx = 0, int rx = m - 1) {
push(x);
if(r < lx || rx < l) return;
if(l <= lx && rx <= r) {
app(x, v);
return;
}
int d = (lx + rx) / 2;
mod(l, r, v, 2*x, lx, d);
mod(l, r, v, 2*x + 1, d + 1, rx);
st[x] = max(st[2*x], st[2*x + 1]);
rp[x] = rp[2*x] + rp[2*x + 1];
}
int qry(int l, int r, int x = 1, int lx = 0, int rx = m - 1) {
push(x);
if(r < lx || rx < l) return 0;
if(l <= lx && rx <= r) {
return rp[x];
}
int d = (lx + rx) / 2;
return qry(l, r, 2*x, lx, d) + qry(l, r, 2*x + 1, d + 1, rx);
}
void print() {
/* for(int i = 1; i < 2*n; ++i) { */
/* cout << "("; */
/* if(st[i] < -1000) cout << "- "; */
/* else cout << st[i] << ' '; */
/* if(lz[i] < -1000) cout << "- "; */
/* else cout << lz[i] << ' '; */
/* if(rp[i] < -1000) cout << "-"; */
/* else cout << rp[i]; */
/* cout << ") "; */
/* if(i & (i + 1)); */
/* else cout << "\n"; */
/* } */
/* cout << '\n'; */
}
void inicjuj(int N, int K, int *D) // initialise
{
k = K;
n = N;
m = 1; while(m < N) m *= 2;
st.resize(2*m, -1); rp.resize(2*m); lz.resize(2*m);
for(int i = 0; i < N; ++i) {
st[i + m] = D[i] - k;
}
for(int i = m - 1; i > 0; --i) {
st[i] = max(st[2*i], st[2*i + 1]);
}
/* print(); */
}
void podlej(int a, int b) // add 1 to [a, b]
{
/* cout << "mod: " << a << ' ' << b << nl; */
mod(a, b);
/* print(); */
}
int dojrzale(int a, int b) // report num ripe in [a, b]
{
kill();
/* cout << "kill\n"; */
/* print(); */
int ret = qry(a, b);
/* cout << "qry: " << a << ' ' << b << nl; */
/* print(); */
return ret;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |