| Task: | Greedy Game |
| Sender: | zxc |
| Submission time: | 2016-07-28 15:53:16 +0300 |
| Language: | C++ |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 100 |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.05 s | details |
| #2 | ACCEPTED | 0.05 s | details |
| #3 | ACCEPTED | 0.04 s | details |
| #4 | ACCEPTED | 0.05 s | details |
| #5 | ACCEPTED | 0.04 s | details |
| #6 | ACCEPTED | 0.04 s | details |
| #7 | ACCEPTED | 0.05 s | details |
| #8 | ACCEPTED | 0.04 s | details |
| #9 | ACCEPTED | 0.04 s | details |
| #10 | ACCEPTED | 0.03 s | details |
| #11 | ACCEPTED | 0.04 s | details |
| #12 | ACCEPTED | 0.05 s | details |
| #13 | ACCEPTED | 0.05 s | details |
| #14 | ACCEPTED | 0.16 s | details |
| #15 | ACCEPTED | 0.17 s | details |
| #16 | ACCEPTED | 0.16 s | details |
| #17 | ACCEPTED | 0.17 s | details |
| #18 | ACCEPTED | 0.19 s | details |
| #19 | ACCEPTED | 0.25 s | details |
| #20 | ACCEPTED | 0.22 s | details |
| #21 | ACCEPTED | 0.23 s | details |
| #22 | ACCEPTED | 0.23 s | details |
| #23 | ACCEPTED | 0.26 s | details |
| #24 | ACCEPTED | 0.18 s | details |
| #25 | ACCEPTED | 0.22 s | details |
| #26 | ACCEPTED | 0.17 s | details |
| #27 | ACCEPTED | 0.23 s | details |
| #28 | ACCEPTED | 0.19 s | details |
| #29 | ACCEPTED | 0.18 s | details |
| #30 | ACCEPTED | 0.17 s | details |
Code
#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
typedef long long ll;
const ll MN = 1e5+100;
const ll N = 1<<17;
pair<ll, pair<ll, ll> > t[MN];
pair<ll, pair<ll, ll> > b[MN];
ll st[2*N];
ll sisu[2*N];
ll getMin(ll k, ll l, ll r, ll x, ll y) {
if(l > y || r < x) return 1e9;
if(l >= x && r <= y) {
return st[k];
}
ll mid = (l+r)/2;
ll q = getMin(k*2, l, mid, x, y);
ll w = getMin(k*2+1, mid+1, r, x, y);
return min(q, w) + sisu[k];
}
ll add(ll k, ll l, ll r, ll x, ll y, ll v) {
if(l > y || r < x) return st[k];
if(l >= x && r <= y) {
sisu[k] += v;
st[k] += v;
return st[k];
}
ll mid = (l+r)/2;
ll q = add(k*2, l, mid, x, y, v);
ll w = add(k*2+1, mid+1, r, x, y, v);
return st[k] = min(q, w) + sisu[k];
}
ll st2[2*N];
ll getSum(int a, int b) {
a += N; b += N;
ll sum = 0;
for(; a <= b; a/=2, b/=2) {
if(a&1) sum += st2[a++];
if(~b&1) sum += st2[b--];
}
return sum;
}
void addValue(int a, int v) {
a += N;
for(; a; a/=2) {
st2[a] += v;
}
}
ll pos[MN];
int main() {
ll n;
cin>>n;
for(ll i = 0; i< n; ++i) {
cin>>t[i].F;
t[i].S.S = i;
}
for(int i = 0; i < n; ++i) {
cin>>b[i].F;
t[i].S.F = b[i].F;
b[i].S.S = i;
}
sort(t, t+n);
for(ll i = 0; i < n; ++i) {
pos[t[i].S.S] = i;
}
for(int i = 0; i < n; ++i) {
b[i].S.F = -pos[b[i].S.S];
}
for(int i = 0; i < 2*N; ++i) {
st[i] = 1e9;
}
sort(b, b+n);
long long ans = 0;
for(ll i = n-1; i >= 0; --i) {
//ll x = pos[b[i].S];
ll x = -b[i].S.F;
//cout<<x<<' '<<b[i].F<<' '<<b[i].S<<'\n';
int q = getSum(x+1, N-1);
if(getMin(1, 0, N-1,0, x-1) != 0 && (q)*2 < (n-x-1)) {
add(1, 0, N-1, 0, x-1, -1);
int jalj = (n-x-2-2*q)/2;
//cout<<"hei "<<b[i].F<<' '<<q<<' '<<jalj<<'\n';
ll q = getMin(1, 0, N-1, x, x);
add(1, 0, N-1, x, x, -q+jalj);
addValue(x, 1);
ans += b[i].F;
}
}
cout<<ans<<'\n';
}
Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 5 1 2 3 4 5 2 3 4 5 6 |
| correct output |
|---|
| 8 |
| user output |
|---|
| 8 |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 10 1 1 1 1 1 1 1 1 1 1 2 3 9 5 6 6 1 2 3 4 |
| correct output |
|---|
| 17 |
| user output |
|---|
| 17 |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 15 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
| correct output |
|---|
| 7 |
| user output |
|---|
| 7 |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 15 2 4 2 8 6 6 5 6 4 10 9 3 10 7 ... |
| correct output |
|---|
| 60 |
| user output |
|---|
| 60 |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 15 3 8 6 9 1 5 1 9 3 10 1 10 9 8 ... |
| correct output |
|---|
| 47 |
| user output |
|---|
| 47 |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 15 2 6 4 9 8 3 8 7 1 8 8 7 5 6 8 7 6 4 9 3 8 9 5 3 10 2 2 4 6 3 |
| correct output |
|---|
| 46 |
| user output |
|---|
| 46 |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 15 7 10 8 8 6 10 5 1 7 3 9 4 7 9 ... |
| correct output |
|---|
| 56 |
| user output |
|---|
| 56 |
Test 8
Verdict: ACCEPTED
| input |
|---|
| 15 9 8 7 7 4 6 4 10 3 7 5 9 5 9 5 3 6 7 2 9 8 3 3 7 5 6 7 9 3 8 |
| correct output |
|---|
| 55 |
| user output |
|---|
| 55 |
Test 9
Verdict: ACCEPTED
| input |
|---|
| 15 684567283 992849846 97315816 3... |
| correct output |
|---|
| 5346487014 |
| user output |
|---|
| 5346487014 |
Test 10
Verdict: ACCEPTED
| input |
|---|
| 15 220108915 735849670 3920201 84... |
| correct output |
|---|
| 4369763599 |
| user output |
|---|
| 4369763599 |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 15 428748595 949568430 413698361 ... |
| correct output |
|---|
| 5262225140 |
| user output |
|---|
| 5262225140 |
Test 12
Verdict: ACCEPTED
| input |
|---|
| 15 310486323 634006126 326650297 ... |
| correct output |
|---|
| 5825473032 |
| user output |
|---|
| 5825473032 |
Test 13
Verdict: ACCEPTED
| input |
|---|
| 15 865322099 789162758 742776009 ... |
| correct output |
|---|
| 5028684388 |
| user output |
|---|
| 5028684388 |
Test 14
Verdict: ACCEPTED
| input |
|---|
| 100000 1 5 7 1 6 8 1 7 9 2 7 7 6 1 8 ... |
| correct output |
|---|
| 387044 |
| user output |
|---|
| 387044 |
Test 15
Verdict: ACCEPTED
| input |
|---|
| 100000 10 6 1 4 1 8 5 4 8 10 5 8 7 5 ... |
| correct output |
|---|
| 388046 |
| user output |
|---|
| 388046 |
Test 16
Verdict: ACCEPTED
| input |
|---|
| 100000 6 1 1 6 7 8 10 6 7 6 8 7 6 5 3... |
| correct output |
|---|
| 387631 |
| user output |
|---|
| 387631 |
Test 17
Verdict: ACCEPTED
| input |
|---|
| 100000 9 2 5 7 5 8 5 3 4 10 5 6 10 2 ... |
| correct output |
|---|
| 387600 |
| user output |
|---|
| 387600 |
Test 18
Verdict: ACCEPTED
| input |
|---|
| 100000 8 7 4 7 3 6 2 6 1 2 7 5 1 5 5 ... |
| correct output |
|---|
| 387928 |
| user output |
|---|
| 387928 |
Test 19
Verdict: ACCEPTED
| input |
|---|
| 100000 329395763 605200206 806179577 ... |
| correct output |
|---|
| 37487670627833 |
| user output |
|---|
| 37487670627833 |
Test 20
Verdict: ACCEPTED
| input |
|---|
| 100000 595917875 55389390 744521721 4... |
| correct output |
|---|
| 37446270419509 |
| user output |
|---|
| 37446270419509 |
Test 21
Verdict: ACCEPTED
| input |
|---|
| 100000 535538034 976297510 186037641 ... |
| correct output |
|---|
| 37452666188784 |
| user output |
|---|
| 37452666188784 |
Test 22
Verdict: ACCEPTED
| input |
|---|
| 100000 148256243 367924566 130727336 ... |
| correct output |
|---|
| 37441139105851 |
| user output |
|---|
| 37441139105851 |
Test 23
Verdict: ACCEPTED
| input |
|---|
| 100000 434072499 230270558 578590809 ... |
| correct output |
|---|
| 37528719082827 |
| user output |
|---|
| 37528719082827 |
Test 24
Verdict: ACCEPTED
| input |
|---|
| 100000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
| correct output |
|---|
| 375239 |
| user output |
|---|
| 375239 |
Test 25
Verdict: ACCEPTED
| input |
|---|
| 100000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
| correct output |
|---|
| 37477679133533 |
| user output |
|---|
| 37477679133533 |
Test 26
Verdict: ACCEPTED
| input |
|---|
| 100000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
| correct output |
|---|
| 375514 |
| user output |
|---|
| 375514 |
Test 27
Verdict: ACCEPTED
| input |
|---|
| 100000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
| correct output |
|---|
| 37505905982098 |
| user output |
|---|
| 37505905982098 |
Test 28
Verdict: ACCEPTED
| input |
|---|
| 100000 100000 100000 100000 100000 10... |
| correct output |
|---|
| 5000000000 |
| user output |
|---|
| 5000000000 |
Test 29
Verdict: ACCEPTED
| input |
|---|
| 100000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
| correct output |
|---|
| 2500000000 |
| user output |
|---|
| 2500000000 |
Test 30
Verdict: ACCEPTED
| input |
|---|
| 100000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
| correct output |
|---|
| 3750025000 |
| user output |
|---|
| 3750025000 |
