#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define pb(e) push_back(e)
#define sv(a) sort(a.begin(),a.end())
#define sa(a,n) sort(a,a+n)
#define mp(a,b) make_pair(a,b)
#define vf first
#define vs second
#define ar array
#define all(x) x.begin(),x.end()
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const double PI=3.14159265358979323846264338327950288419716939937510582097494459230;
mt19937_64 RNG(chrono::steady_clock::now().time_since_epoch().count());
bool remender(ll a , ll b){return a%b;}
//freopen("problemname.in", "r", stdin);
//freopen("problemname.out", "w", stdout);
struct Seg {
int siz;
vector<int> mx;
void init(int n){
siz = 1;
while(siz < n)siz *= 2;
mx.assign(siz * 2 , -1);
}
void build(vector<int>& a , int x , int lx , int rx){
if(rx - lx == 1){
if(lx < a.size())mx[x] = a[lx];
return;
}
int m = (lx + rx)/2;
build(a , 2 * x + 1 , lx , m);
build(a , 2 * x + 2 , m , rx);
mx[x] = max(mx[2 * x + 1] , mx[2 * x + 2]);
}
void build(vector<int>& a){
build(a , 0 , 0 , siz);
}
int range_mx(int l , int r , int x , int lx ,int rx){
if(r <= lx || rx <= l)return -1;
if(lx >= l && rx <= r)return mx[x];
int m = (lx + rx)/2;
return max(range_mx(l , r , 2 * x + 1 , lx , m) , range_mx(l , r , 2 * x + 2 , m ,rx));
}
int range_mx(int l , int r){
return range_mx(l , r , 0 , 0 , siz);
}
};
struct Fen {
vector<int> tree;
int n;
void init(int n1){
n = n1;
tree.assign(n + 1 , 0);
}
void set(int i){
i++;
while(i <= n){
tree[i]++;
i += (i & -i);
}
}
int sum(int i){
i++;
int res = 0;
while(i > 0){
res += tree[i];
i -= (i & -i);
}
return res;
}
};
void solve(){
int n , k;
cin >> n >> k;
int arr[n][2];
for(int i = 0; i < n; i++)cin >> arr[i][0] >> arr[i][1];
vector<pair<int,int>> q;
for(int i = 0; i < k; i++){
int x;
cin >> x;
q.pb(mp(x,i));
}
sort(all(q));
vector<int> a,b;
for(int i = 0; i < k; i++){
if(i == k - 1 || q[i+1].vf != q[i].vf){
a.pb(q[i].vf);
b.pb(q[i].vs);
}
}
Seg st;
st.init(b.size() + 1);
st.build(b);
//cout << "came" << endl;
int pos[n];
ll res = 0;
for(int i = 0; i < n; i++){
if(arr[i][0] == arr[i][1]){
res += arr[i][0];
continue;
}
int l = lower_bound(all(a),min(arr[i][0],arr[i][1])) - a.begin();
int r = lower_bound(all(a),max(arr[i][0],arr[i][1])) - a.begin();
if(l == r){
pos[i] = -1;
}
else pos[i] = st.range_mx(l , r);
}
vector<pair<int,int>> v;
for(int i = 0; i < n; i++){
if(arr[i][0] != arr[i][1])v.pb(mp(max(arr[i][0] , arr[i][1]),i));
}
sort(all(v),greater<>());
Fen ft;
ft.init(k + 1);
int j = q.size() - 1;
int cnt = 0;
for(int i = 0; i < v.size(); i++){
while(j >= 0 && q[j].vf >= v[i].vf){
ft.set(q[j].vs);
j--;
cnt++;
}
int idx = v[i].vs;
if(pos[idx] == k-1){
//cout << v[i].vf << ' ';
res += v[i].vf;
continue;
}
if(pos[idx] == -1){
if(cnt % 2 == 0){
res += arr[idx][0];
//cout << arr[idx][0] << ' ';
}
else {
res += arr[idx][1];
//cout << arr[idx][1] << ' ';
}
continue;
}
int sub = ft.sum(pos[idx]);
//cout << "sub " << sub << ' ';
if((cnt - sub) % 2 == 0){
//cout << v[i].vf << ' ';
res += v[i].vf;
}
else {
res += min(arr[idx][0] , arr[idx][1]);
//cout << min(arr[idx][0] , arr[idx][1]) << ' ';
}
}
cout << res << '\n';
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
//int t;cin >> t;while(t--)
solve();
return 0;
}
Compilation message
fortune_telling2.cpp: In member function 'void Seg::build(std::vector<int>&, int, int, int)':
fortune_telling2.cpp:37:10: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
37 | if(lx < a.size())mx[x] = a[lx];
| ~~~^~~~~~~~~~
fortune_telling2.cpp: In function 'void solve()':
fortune_telling2.cpp:143:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
143 | for(int i = 0; i < v.size(); i++){
| ~~^~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
2 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
2 ms |
340 KB |
Output is correct |
5 |
Correct |
2 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
2 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
340 KB |
Output is correct |
10 |
Correct |
2 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
336 KB |
Output is correct |
12 |
Correct |
1 ms |
340 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
2 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
2 ms |
340 KB |
Output is correct |
5 |
Correct |
2 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
2 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
340 KB |
Output is correct |
10 |
Correct |
2 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
336 KB |
Output is correct |
12 |
Correct |
1 ms |
340 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
14 |
Correct |
9 ms |
1232 KB |
Output is correct |
15 |
Correct |
20 ms |
2128 KB |
Output is correct |
16 |
Correct |
28 ms |
2632 KB |
Output is correct |
17 |
Correct |
38 ms |
4008 KB |
Output is correct |
18 |
Correct |
39 ms |
3936 KB |
Output is correct |
19 |
Correct |
38 ms |
3960 KB |
Output is correct |
20 |
Correct |
38 ms |
3940 KB |
Output is correct |
21 |
Correct |
35 ms |
3916 KB |
Output is correct |
22 |
Correct |
23 ms |
3036 KB |
Output is correct |
23 |
Correct |
24 ms |
3036 KB |
Output is correct |
24 |
Correct |
25 ms |
3040 KB |
Output is correct |
25 |
Correct |
23 ms |
3468 KB |
Output is correct |
26 |
Correct |
33 ms |
3660 KB |
Output is correct |
27 |
Correct |
35 ms |
3956 KB |
Output is correct |
28 |
Correct |
31 ms |
4048 KB |
Output is correct |
29 |
Correct |
31 ms |
3912 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
2 ms |
340 KB |
Output is correct |
3 |
Correct |
1 ms |
336 KB |
Output is correct |
4 |
Correct |
2 ms |
340 KB |
Output is correct |
5 |
Correct |
2 ms |
340 KB |
Output is correct |
6 |
Correct |
1 ms |
340 KB |
Output is correct |
7 |
Correct |
2 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
1 ms |
340 KB |
Output is correct |
10 |
Correct |
2 ms |
332 KB |
Output is correct |
11 |
Correct |
1 ms |
336 KB |
Output is correct |
12 |
Correct |
1 ms |
340 KB |
Output is correct |
13 |
Correct |
1 ms |
332 KB |
Output is correct |
14 |
Correct |
9 ms |
1232 KB |
Output is correct |
15 |
Correct |
20 ms |
2128 KB |
Output is correct |
16 |
Correct |
28 ms |
2632 KB |
Output is correct |
17 |
Correct |
38 ms |
4008 KB |
Output is correct |
18 |
Correct |
39 ms |
3936 KB |
Output is correct |
19 |
Correct |
38 ms |
3960 KB |
Output is correct |
20 |
Correct |
38 ms |
3940 KB |
Output is correct |
21 |
Correct |
35 ms |
3916 KB |
Output is correct |
22 |
Correct |
23 ms |
3036 KB |
Output is correct |
23 |
Correct |
24 ms |
3036 KB |
Output is correct |
24 |
Correct |
25 ms |
3040 KB |
Output is correct |
25 |
Correct |
23 ms |
3468 KB |
Output is correct |
26 |
Correct |
33 ms |
3660 KB |
Output is correct |
27 |
Correct |
35 ms |
3956 KB |
Output is correct |
28 |
Correct |
31 ms |
4048 KB |
Output is correct |
29 |
Correct |
31 ms |
3912 KB |
Output is correct |
30 |
Correct |
56 ms |
9080 KB |
Output is correct |
31 |
Correct |
91 ms |
11044 KB |
Output is correct |
32 |
Correct |
157 ms |
12712 KB |
Output is correct |
33 |
Correct |
234 ms |
17580 KB |
Output is correct |
34 |
Correct |
43 ms |
8812 KB |
Output is correct |
35 |
Correct |
221 ms |
17624 KB |
Output is correct |
36 |
Correct |
222 ms |
17596 KB |
Output is correct |
37 |
Correct |
224 ms |
17588 KB |
Output is correct |
38 |
Correct |
220 ms |
17584 KB |
Output is correct |
39 |
Correct |
232 ms |
17720 KB |
Output is correct |
40 |
Correct |
192 ms |
17320 KB |
Output is correct |
41 |
Correct |
224 ms |
17592 KB |
Output is correct |
42 |
Correct |
226 ms |
17584 KB |
Output is correct |
43 |
Correct |
112 ms |
16964 KB |
Output is correct |
44 |
Correct |
114 ms |
16940 KB |
Output is correct |
45 |
Correct |
119 ms |
16816 KB |
Output is correct |
46 |
Correct |
130 ms |
15296 KB |
Output is correct |
47 |
Correct |
118 ms |
13720 KB |
Output is correct |
48 |
Correct |
178 ms |
17596 KB |
Output is correct |
49 |
Correct |
169 ms |
17648 KB |
Output is correct |