답안 #767427

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
767427 2023-06-26T18:34:32 Z NintsiChkhaidze Growing Trees (BOI11_grow) C++17
0 / 100
111 ms 7500 KB
#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 t[4*N],lz[4*N],a[N];

void push(int h){
	if (lz[h] == 0) return;
	lz[h*2] += lz[h];
	lz[h*2 + 1] += lz[h];
	t[h*2] += lz[h];
	t[h*2 + 1] += lz[h];
	lz[h] =0;
}

void build(int h,int l,int r){
	if (l == r){
		t[h] = a[l];
		return;
	}
	build(left),build(right);
	t[h] = max(t[h*2],t[h*2 + 1]);
}

int get(int h,int l,int r,int idx){
	if (l == r){
		return t[h];
	}

	push(h);
	int mid = (l + r)/2;
	if (idx > mid) return get(right,idx);
	return get(left,idx);
}


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] += val;
		lz[h] += val;
		return;
	}

	push(h);
	upd(left,L,R,val);
	upd(right,L,R,val);
	t[h] = max(t[h*2],t[h*2 + 1]);
}
int find(int h,int l,int r,int H){
	if (l == r) {
		if (t[h] < H) return 0;
		return l;
	}
	push(h);
	if (t[h*2] >= H) return find(left,H);
	return find(right,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;
			
			int l = find(1,1,n,le); // pirvelive le ze meti an tolis indexi
			int r = find(1,1,n,ri + 1) - 1; 
			if (t[1] <= ri) r = n;

			if (t[1] < le) {
				cout<<0<<endl;
				continue;
			}

			cout<<r - l + 1<<"\n";
		}else{
			int x,h;
			cin>>x>>h;

			if (t[1] < h) continue;
			int l = find(1,1,n,h),r = l + x - 1;
			int val = get(1,1,n,r);
			int rr = find(1,1,n,val) - 1;

			upd(1,1,n,l,rr,1);
			x -= (rr - l + 1);
			r = find(1,1,n,val + 1) - 1;
			upd(1,1,n,r - x + 1,r,1);
		}
	}
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 69 ms 6324 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Incorrect 2 ms 468 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 94 ms 1840 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 111 ms 1812 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 60 ms 3944 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 57 ms 6000 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 61 ms 5892 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 97 ms 6752 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 81 ms 6380 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 64 ms 7500 KB Output isn't correct
2 Halted 0 ms 0 KB -