답안 #744081

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
744081 2023-05-18T07:54:08 Z hmm789 Weirdtree (RMI21_weirdtree) C++14
0 / 100
2000 ms 29372 KB
#include "weirdtree.h"
#include <bits/stdc++.h>
using namespace std;

struct node {
	int s, e, m, mx, midx, sm;
	node *l, *r;
	node(int _s, int _e) {
		s = _s, e = _e, m = (s+e)/2, mx = 0, midx = s, sm = 0;
		if(s != e) {
			l = new node(s, m);
			r = new node(m+1, e);
		}
	}
	void update(int x, int val) {
		if(s == e) {
			mx = sm = val;
			return;
		} else if(x > m) r->update(x, val);
		else l->update(x, val);
		sm = l->sm + r->sm;
		if(l->mx >= r->mx) {
			mx = l->mx;
			midx = l->midx;
		} else {
			mx = r->mx;
			midx = r->midx;
		}
	}
	pair<int, int> rmax(int x, int y) {
		if(x <= s && e <= y) return {mx, midx};
		else if(x > m) return r->rmax(x, y);
		else if(y <= m) return l->rmax(x, y);
		else {
			pair<int, int> tmp = l->rmax(x, y);
			pair<int, int> tmp2 = r->rmax(x, y);
			if(tmp.first >= tmp2.first) return tmp;
			else return tmp2;
		}
	}
	int rsum(int x, int y) {
		if(x <= s && e <= y) return sm;
		else if(x > m) return r->rsum(x, y);
		else if(y <= m) return l->rsum(x, y);
		else return l->rsum(x, y) + r->rsum(x, y);
	}
} *root;

void initialise(int N, int Q, int h[]) {
	root = new node(0, N-1);
	for(int i = 0; i < N; i++) {
		root->update(i, h[i]);
	}
}
void cut(int l, int r, int k) {
	l--; r--;
	for(int i = 0; i < k; i++) {
		pair<int, int> tmp = root->rmax(l, r);
		if(tmp.first) root->update(tmp.second, tmp.first-1);
	}
}
void magic(int i, int x) {
	i--;
	root->update(i, x);
}
long long int inspect(int l, int r) {
	l--; r--;
	return root->rsum(l, r);
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2062 ms 340 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2062 ms 340 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 177 ms 29372 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -