Submission #832864

# Submission time Handle Problem Language Result Execution time Memory
832864 2023-08-21T16:04:57 Z mat_jur trapezoid (balkan11_trapezoid) C++14
5 / 100
123 ms 20660 KB
#include <bits/stdc++.h>
using namespace std;
#ifdef DEBUG
auto&operator<<(auto &o, pair<auto, auto> p) {o << "(" << p.first << "," << p.second << ")"; return o;}
auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{";for(auto e:x)o<< e << ", ";return o<<"}";}
#define debug(X) cerr << "["#X"]:" << X << '\n';
#else 
#define debug(X) ;
#endif
#define ll long long
#define trapez tuple<int, int, int, int, int>

int main () {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
//	freopen("trapezoid.in", "r", stdin);
//	freopen("trapezoid.out", "w", stdout);

	int n;
	cin >> n;
	vector<tuple<int, int, int, int, int>> v;
	map<int, int> M;
	for (int i = 0; i < n; i++) {
		int a, b, c, d;
		cin >> a >> b >> c >> d;
		v.emplace_back(make_tuple(a, b, c, d, i));
		M[c]; M[d];
	}
	M[0];
	int x = 0;
	for (auto &e : M) {
		e.second = x++;
	}
	x--;
	sort(v.begin(), v.end());
	auto cmp = [&](trapez a, trapez b) {return get<1>(a) < get<1>(b);};
	priority_queue<trapez, vector<trapez>, decltype(cmp)> Q(cmp);
	vector<pair<int, int>> dp(n);
	pair<int, int> res = {0, 0};

	int base = 1;
	while (base < x) base *= 2;
	vector<pair<int, int>> tree(2*base);
	auto merge = [&](pair<int, int> a, pair<int, int> b) {
		if (a.first == b.first) return make_pair(a.first, b.second+a.second);
		if (a.first > b.first) return a;
		else return b;
	};
	auto update = [&](int v, pair<int, int> x) {
		v += base;
		while (v > 0) {
			tree[v] = merge(tree[v], x);
			v /= 2;
		}
	};
	auto query = [&](int a, int b) {
		a += base-1;
		b += base+1;
		pair<int, int> res = {0, 0};
		while (a/2 != b/2) {
			if (a%2 == 0) res = merge(res, tree[a+1]);
			if (b%2 == 1) res = merge(res, tree[b-1]);
			a /= 2; b /= 2;
		}
		return res;
	};
	for (auto &[a, b, c, d, idx] : v) {
		while (!Q.empty() && get<1>(Q.top()) < a) {
			update(M[get<3>(Q.top())], dp[get<4>(Q.top())]);
			Q.pop();
		}
		dp[idx] = query(0, M[c]);
		dp[idx].first++;
		if (dp[idx].first == 1) dp[idx].second = 1;
		res = merge(res, dp[idx]);
		Q.push(make_tuple(a, b, c, d, idx));
	}
	
	cout << res.first << ' ' << res.second << '\n';

	return 0;
}

Compilation message

trapezoid.cpp: In function 'int main()':
trapezoid.cpp:68:13: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   68 |  for (auto &[a, b, c, d, idx] : v) {
      |             ^
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Incorrect 1 ms 340 KB Output isn't correct
3 Incorrect 1 ms 340 KB Output isn't correct
4 Incorrect 1 ms 520 KB Output isn't correct
5 Incorrect 2 ms 748 KB Output isn't correct
6 Incorrect 3 ms 968 KB Output isn't correct
7 Incorrect 4 ms 1100 KB Output isn't correct
8 Incorrect 5 ms 1496 KB Output isn't correct
9 Incorrect 9 ms 2728 KB Output isn't correct
10 Incorrect 19 ms 4908 KB Output isn't correct
11 Incorrect 29 ms 5584 KB Output isn't correct
12 Incorrect 64 ms 10624 KB Output isn't correct
13 Incorrect 60 ms 11752 KB Output isn't correct
14 Incorrect 71 ms 16992 KB Output isn't correct
15 Incorrect 89 ms 17604 KB Output isn't correct
16 Incorrect 97 ms 18160 KB Output isn't correct
17 Incorrect 103 ms 18824 KB Output isn't correct
18 Incorrect 93 ms 19340 KB Output isn't correct
19 Incorrect 123 ms 17312 KB Output isn't correct
20 Incorrect 119 ms 20660 KB Output isn't correct