Submission #215929

# Submission time Handle Problem Language Result Execution time Memory
215929 2020-03-26T12:33:54 Z tselmegkh Fortune Telling 2 (JOI14_fortune_telling2) C++14
35 / 100
151 ms 9708 KB
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>

using namespace __gnu_pbds;
using namespace std;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

const int N = 2e5 + 5, inf = 1e9;
#define pb push_back
#define mp make_pair
#define ll long long
#define ff first
#define ss second
#define all(a) a.begin(),a.end()
#define sz(x) (int)x.size()
typedef vector<int> vi;
typedef pair<int,int> ii;
typedef vector<ii> vii;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int a[N], b[N], t[N], st[4 * N], bit[N], n, k, siz;
vi q[N];

void update(int v, int l, int r, int idx, int x){
	if(l > idx || r < idx)return;
	if(l == idx && r == idx){
		st[v] = x;
		return;
	}
	int mid = (l + r) / 2;
	update(v * 2, l, mid, idx, x);
	update(v * 2 + 1, mid + 1, r, idx, x);
	st[v] = max(st[v * 2], st[v * 2 + 1]);
}
int query(int v, int l, int r, int ql, int qr){
	if(l > qr || r < ql)return 0;
	if(l >= ql && r <= qr)return st[v];
	int mid = (l + r) / 2;
	return max(query(v * 2, l, mid, ql, qr), query(v * 2 + 1, mid + 1, r, ql, qr));
}
void add(int i){
	if(!i)return;
	while(i <= siz){
		bit[i]++;
		i += (i & (-i));
	}
}
int sum(int i){
	int res = 0;
	while(i > 0){
		res += bit[i];
		i -= (i & (-i));
	}
	return res;
}
int rangesum(int l, int r){
	return sum(r) - sum(l - 1);
}
int main(){
	ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin >> n >> k;
	vi v;
	for(int i = 1; i <= n; i++){
		cin >> a[i] >> b[i];
		v.pb(a[i]);
		v.pb(b[i]);
	}
	for(int i = 1; i <= k; i++){
		cin >> t[i];
		v.pb(t[i]);
	}
	sort(all(v));
	v.resize(distance(v.begin(), unique(all(v))));
	siz = v.size();
	for(int i = 1; i <= k; i++){
		t[i] = lower_bound(all(v), t[i]) - v.begin() + 1;
		update(1, 1, sz(v), t[i], i);
	}
	ll ans = 0;
	for(int i = 1; i <= n; i++){
		if(a[i] == b[i]){
			ans += a[i];
			continue;
		}
		a[i] = lower_bound(all(v), a[i]) - v.begin() + 1;
		b[i] = lower_bound(all(v), b[i]) - v.begin() + 1;
		int mx = query(1, 1, sz(v), min(a[i], b[i]), max(a[i], b[i]) - 1);
		if(mx && a[i] < b[i])swap(a[i], b[i]);
		q[mx].pb(i);
	}
	for(int i = k; i >= 0; i--){
		for(auto x : q[i]){
			int cnt = rangesum(max(a[x], b[x]), siz);
			if(cnt & 1){
				swap(a[x], b[x]);
			}
			//cout << x << ' ' << cnt << ' ' << v[a[x] - 1] << ' ' << v[b[x] - 1] << '\n';
			ans += v[a[x] - 1];
		}
		add(t[i]);
	}
	cout << ans << '\n';
	return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 8 ms 5120 KB Output is correct
2 Correct 8 ms 5248 KB Output is correct
3 Correct 8 ms 5120 KB Output is correct
4 Correct 9 ms 5120 KB Output is correct
5 Correct 11 ms 5120 KB Output is correct
6 Correct 8 ms 5120 KB Output is correct
7 Correct 9 ms 5120 KB Output is correct
8 Correct 9 ms 5120 KB Output is correct
9 Correct 9 ms 5120 KB Output is correct
10 Correct 8 ms 5120 KB Output is correct
11 Correct 8 ms 5120 KB Output is correct
12 Correct 8 ms 5120 KB Output is correct
13 Correct 8 ms 5120 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 5120 KB Output is correct
2 Correct 8 ms 5248 KB Output is correct
3 Correct 8 ms 5120 KB Output is correct
4 Correct 9 ms 5120 KB Output is correct
5 Correct 11 ms 5120 KB Output is correct
6 Correct 8 ms 5120 KB Output is correct
7 Correct 9 ms 5120 KB Output is correct
8 Correct 9 ms 5120 KB Output is correct
9 Correct 9 ms 5120 KB Output is correct
10 Correct 8 ms 5120 KB Output is correct
11 Correct 8 ms 5120 KB Output is correct
12 Correct 8 ms 5120 KB Output is correct
13 Correct 8 ms 5120 KB Output is correct
14 Correct 23 ms 5760 KB Output is correct
15 Correct 41 ms 6392 KB Output is correct
16 Correct 59 ms 7412 KB Output is correct
17 Correct 77 ms 7796 KB Output is correct
18 Correct 78 ms 7796 KB Output is correct
19 Correct 78 ms 7792 KB Output is correct
20 Correct 78 ms 7796 KB Output is correct
21 Correct 76 ms 7924 KB Output is correct
22 Correct 62 ms 7540 KB Output is correct
23 Correct 61 ms 7028 KB Output is correct
24 Correct 59 ms 6900 KB Output is correct
25 Correct 62 ms 7796 KB Output is correct
26 Correct 64 ms 7412 KB Output is correct
27 Correct 74 ms 7540 KB Output is correct
28 Correct 65 ms 7824 KB Output is correct
29 Correct 71 ms 7796 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 5120 KB Output is correct
2 Correct 8 ms 5248 KB Output is correct
3 Correct 8 ms 5120 KB Output is correct
4 Correct 9 ms 5120 KB Output is correct
5 Correct 11 ms 5120 KB Output is correct
6 Correct 8 ms 5120 KB Output is correct
7 Correct 9 ms 5120 KB Output is correct
8 Correct 9 ms 5120 KB Output is correct
9 Correct 9 ms 5120 KB Output is correct
10 Correct 8 ms 5120 KB Output is correct
11 Correct 8 ms 5120 KB Output is correct
12 Correct 8 ms 5120 KB Output is correct
13 Correct 8 ms 5120 KB Output is correct
14 Correct 23 ms 5760 KB Output is correct
15 Correct 41 ms 6392 KB Output is correct
16 Correct 59 ms 7412 KB Output is correct
17 Correct 77 ms 7796 KB Output is correct
18 Correct 78 ms 7796 KB Output is correct
19 Correct 78 ms 7792 KB Output is correct
20 Correct 78 ms 7796 KB Output is correct
21 Correct 76 ms 7924 KB Output is correct
22 Correct 62 ms 7540 KB Output is correct
23 Correct 61 ms 7028 KB Output is correct
24 Correct 59 ms 6900 KB Output is correct
25 Correct 62 ms 7796 KB Output is correct
26 Correct 64 ms 7412 KB Output is correct
27 Correct 74 ms 7540 KB Output is correct
28 Correct 65 ms 7824 KB Output is correct
29 Correct 71 ms 7796 KB Output is correct
30 Incorrect 151 ms 9708 KB Output isn't correct
31 Halted 0 ms 0 KB -