#include <bits/stdc++.h>
#define pb push_back
#define s second
#define f first
#define ll long long
#define pii pair <int,int>
#define left (h<<1),l,((l + r)>>1)
#define right ((h<<1)|1),((l+r)>>1) + 1,r
#define int ll // ?
using namespace std;
const int N = 1e5 + 5,inf = 1e9;
int lz[4*N],a[N];
struct {
int mx;
int mn;
} t[4*N];
void push(int h){
if (lz[h] == 0) return;
lz[h*2] += lz[h];
lz[h*2 + 1] += lz[h];
t[h*2].mx += lz[h];
t[h*2].mn += lz[h];
t[h*2 + 1].mn += lz[h];
t[h*2 + 1].mx += lz[h];
lz[h] =0;
}
void build(int h,int l,int r){
if (l == r){
t[h].mn = t[h].mx = a[l];
return;
}
build(left);
build(right);
t[h].mx = max(t[h*2].mx,t[h*2 + 1].mx);
t[h].mn = min(t[h*2].mn,t[h*2 + 1].mn);
}
int get(int h,int l,int r,int idx){
if (l == r) return t[h].mx;
push(h);
int mid = (l + r)/2;
if (idx > mid) return get(right,idx);
return get(left,idx);
t[h].mx = max(t[h*2].mx,t[h*2 + 1].mx);
t[h].mn = min(t[h*2].mn,t[h*2 + 1].mn);
}
void upd(int h,int l,int r,int L,int R,int val){
if (r < L || R < l) return;
if (L <= l && r <= R){
t[h].mn += val;
t[h].mx += val;
lz[h] += val;
return;
}
push(h);
upd(left,L,R,val);
upd(right,L,R,val);
t[h].mx = max(t[h*2].mx,t[h*2 + 1].mx);
t[h].mn = min(t[h*2].mn,t[h*2 + 1].mn);
}
int find(int h,int l,int r,int H){
if (l == r) return l;
push(h);
if (t[h*2].mx >= H) return find(left,H);
return find(right,H);
}
int findlast(int h,int l,int r,int H){
if (l == r) return l;
push(h);
if (t[h*2 + 1].mn <= H) return findlast(right,H);
return findlast(left,H);
}
signed main (){
ios_base::sync_with_stdio(0),cin.tie(NULL),cout.tie(NULL);
int n,Q;
cin>>n>>Q;
for (int i = 1; i <= n; i++)
cin>>a[i];
sort(a+1,a+n+1);
build(1,1,n);
while (Q--){
char c;
cin>>c;
if (c == 'C'){
int le,ri;
cin>>le>>ri;
if (t[1].mx < le || t[1].mn > ri) {
cout<<0<<endl;
continue;
}
int l = find(1,1,n,le);
int r = findlast(1,1,n,ri);
cout<<max(0LL,r - l + 1)<<"\n";
}else{
int x,h;
cin>>x>>h;
if (t[1].mx < h) continue;
int l = find(1,1,n,h),r = min(n,l + x - 1);
int val = get(1,1,n,r);
int rr = findlast(1,1,n,val - 1);
if (l <= rr){
upd(1,1,n,l,rr,1);
x -= (rr - l + 1);
}
r = findlast(1,1,n,val);
upd(1,1,n,r - x + 1,r,1);
}
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
71 ms |
7508 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
468 KB |
Output is correct |
2 |
Incorrect |
2 ms |
468 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
83 ms |
1228 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
130 ms |
1156 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
74 ms |
4256 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
58 ms |
7368 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
95 ms |
7400 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
96 ms |
7556 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
62 ms |
7504 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
66 ms |
8056 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |