Submission #761786

# Submission time Handle Problem Language Result Execution time Memory
761786 2023-06-20T09:31:09 Z Sohsoh84 Jousting tournament (IOI12_tournament) C++17
100 / 100
151 ms 11764 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

using namespace std;
using namespace __gnu_pbds;

typedef tree<int, null_type, less<int>, rb_tree_tag,
       	tree_order_statistics_node_update> ordered_set;

#define all(x)		(x).begin(),(x).end()
#define debug(x)	cerr << #x << ": " << x << endl;
#define sep		' '

const int MAXN = 1e6 + 10;

int n, ans[MAXN];
 
namespace fenwick {
	int fen[MAXN];
 
	inline void update(int ind, int val) {
		for (++ind; ind < MAXN; ind += ind & -ind)
			fen[ind] += val;
	}
 
	inline void update(int l, int r, int val) {
		update(l, val);
		update(r + 1, -val);
	}
 
	inline int query(int ind) {
		int ans = 0;
		for (++ind; ind > 0; ind -= ind & -ind)
			ans += fen[ind];
		
		return ans;
	}
}

int GetBestPosition(int N, int C, int R, int *K, int *S, int *E) {
	n = N;
	vector<int> bst;
	for (int i = 0; i < n - 1; i++)
		if (K[i] > R)
			bst.push_back(i);

	ordered_set pst;
	for (int i = 0; i <= n; i++)
		pst.insert(i);

	set<int> opt;
	for (int i = 0; i < n; i++)
		opt.insert(i);

	for (int i = 0; i < C; i++) {
		int l = *pst.find_by_order(S[i]), r = *pst.find_by_order(E[i] + 1) - 1;
		if (l == r) continue;
		
		while (*pst.upper_bound(l) <= r) 
			pst.erase(pst.upper_bound(l));

		auto it = lower_bound(all(bst), l);
		if (it != bst.end() && *it <= r - 1) {
			while (opt.lower_bound(l) != opt.end() && *opt.lower_bound(l) <= r) {
				int ind = *opt.lower_bound(l);
				ans[ind] = fenwick::query(ind);
				opt.erase(ind);
			}
		} else fenwick::update(l, r, 1);
	}

	for (int ind : opt)
		ans[ind] = fenwick::query(ind);

	int fans = 0;
	for (int i = 0; i < n; i++) {
		if (ans[i] > ans[fans])
			fans = i;
	}

	return fans;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 424 KB Output is correct
2 Correct 4 ms 852 KB Output is correct
3 Correct 3 ms 852 KB Output is correct
4 Correct 5 ms 852 KB Output is correct
5 Correct 4 ms 852 KB Output is correct
6 Correct 5 ms 852 KB Output is correct
7 Correct 4 ms 852 KB Output is correct
8 Correct 4 ms 852 KB Output is correct
9 Correct 3 ms 724 KB Output is correct
10 Correct 7 ms 852 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 65 ms 5936 KB Output is correct
2 Correct 119 ms 11616 KB Output is correct
3 Correct 101 ms 10564 KB Output is correct
4 Correct 113 ms 11664 KB Output is correct
5 Correct 111 ms 11272 KB Output is correct
6 Correct 151 ms 11616 KB Output is correct
7 Correct 115 ms 11764 KB Output is correct
8 Correct 116 ms 11732 KB Output is correct
9 Correct 98 ms 10808 KB Output is correct
10 Correct 106 ms 11052 KB Output is correct