답안 #379927

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
379927 2021-03-19T17:34:05 Z voldemort Examination (JOI19_examination) C++17
100 / 100
1040 ms 33140 KB
#include "bits/stdc++.h"
using namespace std;
#define for_(i, s, e) for (int i = s; i < (int) e; i++)
#define for__(i, s, e) for (ll i = s; i < e; i++)
typedef long long ll;
typedef vector<int> vi;
typedef array<int, 2> ii;
#define endl '\n'

// Ask for sum 1 -> n for full (one based indexing)
class BIT {
	private: vector<int> tree; int n;
	int LSOne(int x) {
		return x&(-x);
	}

	public:
		void build(int x) {
			n = x;
			tree.resize(n+1);
		}
		int sum(int a) {
			int sum = 0;
			for (; a > 0; a -= LSOne(a)) sum += tree[a];
			return sum;
		}
		int sum(int a, int b) {
			return sum(b) - (a == 1 ? 0 : sum(a-1));
		}
		void update(int p, int v) {
			for (; p < n+1; p += LSOne(p)) tree[p] += v;
		}
};

int n, q, pt = 1;
vector<array<int, 4>> pts; // {s1, s2, sum, index: 1 -> contestant, else -ve query index}
vi ans;
BIT tree;
map<int, int> mp;

void solve(int l, int r) {
	if (l == r) return;
	
	int mid = (l+r)/2;
	
	vector<array<int, 3>> curr; // {s2, sum, index: 1 -> contestant, else -ve query index}
	for_(i, mid+1, r+1) if (pts[i][3] != 1) curr.push_back({pts[i][1], pts[i][2], pts[i][3]});
	for_(i, l, mid+1) if (pts[i][3] == 1) curr.push_back({pts[i][1], pts[i][2], 1});
	
	sort(curr.rbegin(), curr.rend());
	
	for (auto &i: curr) {
		if (i[2] == 1) tree.update(i[1], 1);
		else ans[-i[2]] += tree.sum(i[1], pt);
	}
	
	for (auto &i: curr) if (i[2] == 1) tree.update(i[1], -1);
	
	solve(l, mid); solve(mid+1, r);
}



int main() {
#ifdef mlocal
	freopen("test.in", "r", stdin);
#endif
	
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	cin >> n >> q;
	pts.resize(n+q); ans.resize(q);
	
	for_(i, 0, n) {
		cin >> pts[i][0] >> pts[i][1];
		pts[i][2] = pts[i][0]+pts[i][1]; pts[i][3] = 1;
		mp[pts[i][1]] = mp[pts[i][2]] = 0;
	}
	for_(i, n, n+q) {
		cin >> pts[i][0] >> pts[i][1] >> pts[i][2];
		pts[i][3] = n-i;
		mp[pts[i][1]] = mp[pts[i][2]] = 0;
	}
	
	for (auto &i: mp) mp[i.first] = pt++;
	for_(i, 0, n+q) {
		pts[i][1] = mp[pts[i][1]]; pts[i][2] = mp[pts[i][2]]; 
	}
	
	sort(pts.rbegin(), pts.rend());
	tree.build(pt);
	solve(0, n+q-1);
	
	for (auto i: ans) cout << i << endl;
	cout << endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 0 ms 364 KB Output is correct
3 Correct 0 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 0 ms 364 KB Output is correct
7 Correct 13 ms 1132 KB Output is correct
8 Correct 14 ms 1132 KB Output is correct
9 Correct 14 ms 1132 KB Output is correct
10 Correct 11 ms 876 KB Output is correct
11 Correct 13 ms 1260 KB Output is correct
12 Correct 7 ms 492 KB Output is correct
13 Correct 12 ms 1132 KB Output is correct
14 Correct 12 ms 1132 KB Output is correct
15 Correct 12 ms 1132 KB Output is correct
16 Correct 9 ms 1004 KB Output is correct
17 Correct 10 ms 1004 KB Output is correct
18 Correct 6 ms 640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 562 ms 13028 KB Output is correct
2 Correct 558 ms 12900 KB Output is correct
3 Correct 542 ms 12900 KB Output is correct
4 Correct 416 ms 9696 KB Output is correct
5 Correct 429 ms 11360 KB Output is correct
6 Correct 236 ms 6756 KB Output is correct
7 Correct 551 ms 16860 KB Output is correct
8 Correct 504 ms 14820 KB Output is correct
9 Correct 503 ms 16096 KB Output is correct
10 Correct 393 ms 12256 KB Output is correct
11 Correct 394 ms 11360 KB Output is correct
12 Correct 212 ms 6600 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 562 ms 13028 KB Output is correct
2 Correct 558 ms 12900 KB Output is correct
3 Correct 542 ms 12900 KB Output is correct
4 Correct 416 ms 9696 KB Output is correct
5 Correct 429 ms 11360 KB Output is correct
6 Correct 236 ms 6756 KB Output is correct
7 Correct 551 ms 16860 KB Output is correct
8 Correct 504 ms 14820 KB Output is correct
9 Correct 503 ms 16096 KB Output is correct
10 Correct 393 ms 12256 KB Output is correct
11 Correct 394 ms 11360 KB Output is correct
12 Correct 212 ms 6600 KB Output is correct
13 Correct 727 ms 17380 KB Output is correct
14 Correct 641 ms 16356 KB Output is correct
15 Correct 555 ms 15452 KB Output is correct
16 Correct 502 ms 13028 KB Output is correct
17 Correct 520 ms 13536 KB Output is correct
18 Correct 238 ms 8036 KB Output is correct
19 Correct 707 ms 17376 KB Output is correct
20 Correct 689 ms 16608 KB Output is correct
21 Correct 703 ms 18908 KB Output is correct
22 Correct 398 ms 12256 KB Output is correct
23 Correct 394 ms 11360 KB Output is correct
24 Correct 211 ms 6688 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 0 ms 364 KB Output is correct
3 Correct 0 ms 364 KB Output is correct
4 Correct 1 ms 364 KB Output is correct
5 Correct 1 ms 364 KB Output is correct
6 Correct 0 ms 364 KB Output is correct
7 Correct 13 ms 1132 KB Output is correct
8 Correct 14 ms 1132 KB Output is correct
9 Correct 14 ms 1132 KB Output is correct
10 Correct 11 ms 876 KB Output is correct
11 Correct 13 ms 1260 KB Output is correct
12 Correct 7 ms 492 KB Output is correct
13 Correct 12 ms 1132 KB Output is correct
14 Correct 12 ms 1132 KB Output is correct
15 Correct 12 ms 1132 KB Output is correct
16 Correct 9 ms 1004 KB Output is correct
17 Correct 10 ms 1004 KB Output is correct
18 Correct 6 ms 640 KB Output is correct
19 Correct 562 ms 13028 KB Output is correct
20 Correct 558 ms 12900 KB Output is correct
21 Correct 542 ms 12900 KB Output is correct
22 Correct 416 ms 9696 KB Output is correct
23 Correct 429 ms 11360 KB Output is correct
24 Correct 236 ms 6756 KB Output is correct
25 Correct 551 ms 16860 KB Output is correct
26 Correct 504 ms 14820 KB Output is correct
27 Correct 503 ms 16096 KB Output is correct
28 Correct 393 ms 12256 KB Output is correct
29 Correct 394 ms 11360 KB Output is correct
30 Correct 212 ms 6600 KB Output is correct
31 Correct 727 ms 17380 KB Output is correct
32 Correct 641 ms 16356 KB Output is correct
33 Correct 555 ms 15452 KB Output is correct
34 Correct 502 ms 13028 KB Output is correct
35 Correct 520 ms 13536 KB Output is correct
36 Correct 238 ms 8036 KB Output is correct
37 Correct 707 ms 17376 KB Output is correct
38 Correct 689 ms 16608 KB Output is correct
39 Correct 703 ms 18908 KB Output is correct
40 Correct 398 ms 12256 KB Output is correct
41 Correct 394 ms 11360 KB Output is correct
42 Correct 211 ms 6688 KB Output is correct
43 Correct 1040 ms 31624 KB Output is correct
44 Correct 973 ms 31584 KB Output is correct
45 Correct 969 ms 31584 KB Output is correct
46 Correct 627 ms 19968 KB Output is correct
47 Correct 845 ms 29540 KB Output is correct
48 Correct 252 ms 7904 KB Output is correct
49 Correct 989 ms 33140 KB Output is correct
50 Correct 991 ms 31620 KB Output is correct
51 Correct 954 ms 32988 KB Output is correct
52 Correct 737 ms 24804 KB Output is correct
53 Correct 416 ms 14096 KB Output is correct