CSES - Siperia opettaa 2.0 - Results
Submission details
Task:Youngling tournament
Sender:zxc
Submission time:2016-07-28 17:52:39 +0300
Language:C++
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.05 sdetails
#3ACCEPTED0.06 sdetails
#4ACCEPTED0.06 sdetails
#5ACCEPTED0.06 sdetails
#6ACCEPTED0.06 sdetails
#7ACCEPTED0.05 sdetails
#8ACCEPTED0.06 sdetails
#9ACCEPTED0.06 sdetails
#10ACCEPTED0.06 sdetails
#11ACCEPTED0.05 sdetails
#12ACCEPTED0.06 sdetails
#13ACCEPTED0.05 sdetails
#14ACCEPTED0.05 sdetails
#15ACCEPTED0.07 sdetails
#16ACCEPTED0.07 sdetails
#17ACCEPTED0.06 sdetails
#18ACCEPTED0.06 sdetails
#19ACCEPTED0.06 sdetails
#20ACCEPTED0.07 sdetails
#21ACCEPTED0.49 sdetails
#22ACCEPTED0.50 sdetails
#23ACCEPTED0.51 sdetails
#24ACCEPTED0.43 sdetails
#25ACCEPTED0.46 sdetails
#26ACCEPTED0.43 sdetails
#27--details
#28--details
#29--details
#30--details
#31--details
#32--details
#33--details
#34--details
#35--details
#36--details
#37--details
#38--details
#39--details
#40--details
#41--details
#42--details
#43--details
#44--details
#45--details
#46--details
#47ACCEPTED1.97 sdetails
#48--details
#49ACCEPTED1.88 sdetails
#50--details
#51--details
#52--details
#53--details
#54--details
#55--details
#56--details
#57--details
#58--details
#59--details
#60--details
#61--details
#62--details
#63--details
#64--details
#65--details
#66--details
#67--details
#68--details
#69--details
#70--details
#71--details
#72--details
#73--details
#74--details

Code

#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
typedef long long ll;
const int N = 1<<17;
struct Node {
    pair<ll, ll> val;
    ll prior;
    int cnt;
    ll sum;
    ll ma;
    Node * left;
    Node * right;
    Node(ll v, ll i) {
	val = {v, i};
	sum = 0;
	ma = 0;
	prior = rand();
	cnt = 1;
	left = right = NULL;
    }
};
Node * root;
int cnt(Node * a) {
    if(a == NULL) return 0;
    return a->cnt;
}
ll sum(Node * a) {
    if(a == NULL) return 0;
    return a->sum;
}
ll ma(Node * a) {
    if(a == NULL) return 0;
    return a->ma;
}
void upd(Node * a) {
    if(a == NULL) return;
    a->cnt = cnt(a->left) + cnt(a->right) + 1;
    a->sum = sum(a->left) + sum(a->right) + a->val.F;
    a->ma = max(ma(a->left), max(ma(a->right), a->val.F));
}
void split(Node* k, Node*& l, Node*& r, int c) {
    if(k == NULL) {
	l = r = NULL;
    }
    else {
	if(cnt(k->left) + 1 <= c) {
	    split(k->right, k->right, r, c - cnt(k->left)-1);
	    l = k;
	}
	else {
	    split(k->left, l, k->left, c);
	    r = k;
	}
    }
    upd(k);
}
void merge(Node*& k, Node* l, Node* r) {
    if(l == NULL) {
	k = r;
    }
    else if(r == NULL) {
	k = l;
    }
    else {
	if(l->prior < r->prior) {
	    merge(l->right, l->right, r);
	    k = l;
	}
	else {
	    merge(r->left, l, r->left);
	    k = r;
	}
    }
    upd(k);
}
int n;
ll getSum(Node * k, int x, int y, int cSum) {
    if(k == NULL) return 0;
    //cout<<k->val.F<<endl;
    int l = cSum;
    int r = cSum + cnt(k) - 1;
    if(l > y || r < x) return 0;
    if(l >= x && r <= y) {
	return k->sum;
    }
    ll mid = cSum + cnt(k->left);
    ll q = getSum(k->left, x, y, cSum);
    ll w = getSum(k->right, x, y, cSum+cnt(k->left)+1);
    if(mid >= x && mid <= y) {
	q += k->val.F;
    }
    return q + w;
}
ll getMax(Node * k, int x, int y, int cSum) {
    if(k == NULL) return -1e18;
    int l = cSum;
    int r = cSum + cnt(k) - 1;
    if(l > y || r < x) return -1e18;
    if(l >= x && r <= y) {
	return k->ma;
    }
    ll mid = cSum + cnt(k->left);
    ll q = getMax(k->left, x, y, cSum);
    ll w = getMax(k->right, x, y, cSum+cnt(k->left)+1);
    if(mid >= x && mid <= y) {
	q = max(q, k->val.F);

    }
    return max(q,w);
}
void solve() {
    ll sum = getSum(root, n-1, n-1, -1);
    int pos = n-2;
    int ans = 1;
    //cout<<"ASDASD\n";
    //cout<<sum<<'\n';
    while(pos >= 0) {
//	cout<<pos<<' ';
	int lo = 0;
	int hi = pos;
	int best = -1;
	while(lo <= hi) {
	    int mid = (lo+hi)/2;
//	    cout<<"lol "<<mid<<' '<<getMax(root, mid, pos, -1)<<' '<<sum<<'\n';
	    if(getMax(root, mid, pos, -1) >= sum) {
		lo = mid+1;
		best = mid;
	    }
	    else {
		hi = mid-1;
	    }
	}
//	cout<<best<<'\n';
//	cout<<'\n';
	if(best == -1) break;
	sum = getSum(root, best+1, n-1, -1);
	if(getMax(root, best, best, -1) >= sum) {
	    ++ans;
	}
	sum = getSum(root, best, n-1, -1);
	pos = best-1;
    }
    cout<<ans<<'\n';
}
int findPos(Node* k, pair<ll, ll> val) {
    if(k == NULL) {
	return -1e9;
    }
    if(val <= k->val) {
	int q = findPos(k->right, val) + cnt(k->left) + 1;
	if(q < 0) {
	    return cnt(k->left) + 1;
	}
	return q;
    }
    return findPos(k->left, val);
}
void insert(Node*& root, Node * a) {
    int pos = findPos(root, a->val);
    Node * t1, *t2;
    split(root, t1, t2, pos);
    merge(t1, t1, a);
    merge(root, t1, t2);
}
void print(Node * a) {
    if(a == NULL) return;
    print(a->left);
    cout<<a->val.F<<' ';
    print(a->right);
}
Node * qwe[101010];
int main() {
    cin>>n;
    root = new Node({(ll)1e18, (ll)-1});
    root->prior = -1e18;
    for(int i = 0; i < n; ++i) {
	ll q;
	cin>>q;
	qwe[i] = new Node({(ll)q, i});
	insert(root, qwe[i]);
    }
//	print(root);
//	cout<<endl;;
    solve();
    int m;
    cin>>m;
    for(int i = 0; i< m; ++i) {
	ll k, f;
	cin>>k>>f;
	--k;
	//cout<<"QWEQWE "<<i<<'\n';
	int pos = findPos(root, qwe[k]->val);
	//cout<<pos<<'\n';

	Node * t1, *t2, *t3;
	split(root, t1, t3, pos);
	split(t1, t1, t2, pos-1);

	merge(root, t1, t3);
	qwe[k]->val.F = f;
	insert(root, qwe[k]);

//	print(root);
//	cout<<endl;;
	solve();
    }
}

Test details

Test 1

Verdict: ACCEPTED

input
3
2 1 3
3
1 3
2 7
...

correct output
3
2
3
2

user output
3
2
3
2

Test 2

Verdict: ACCEPTED

input
7
2 14 14 15 5 2 5
5
5 2
4 12
...

correct output
4
3
3
3
3
...

user output
4
3
3
3
3
...

Test 3

Verdict: ACCEPTED

input
10
1 3 40 6 2 20 7 79 80 100
10
9 58
10 40
...

correct output
7
6
6
6
5
...

user output
7
6
6
6
5
...

Test 4

Verdict: ACCEPTED

input
10
1 3 40 6 2 20 7 79 80 100
10
9 8
10 10
...

correct output
7
4
4
3
2
...

user output
7
4
4
3
2
...

Test 5

Verdict: ACCEPTED

input
10
1 3 40 6 2 20 7 79 80 100
10
9 80
10 4
...

correct output
7
7
3
2
4
...

user output
7
7
3
2
4
...

Test 6

Verdict: ACCEPTED

input
10
1 3 100 47 95 3 2 2 24 12
10
10 56
1 52
...

correct output
6
4
4
4
3
...

user output
6
4
4
4
3
...

Test 7

Verdict: ACCEPTED

input
10
1 3 100 47 95 3 2 2 24 12
10
10 6
1 2
...

correct output
6
5
5
5
4
...

user output
6
5
5
5
4
...

Test 8

Verdict: ACCEPTED

input
10
1 3 100 47 95 3 2 2 24 12
10
10 91
2 2
...

correct output
6
5
5
5
4
...

user output
6
5
5
5
4
...

Test 9

Verdict: ACCEPTED

input
100
189 48 295 293 281 74 10000 10...

correct output
2
2
2
2
2
...

user output
2
2
2
2
2
...

Test 10

Verdict: ACCEPTED

input
100
189 48 295 293 281 74 10000 10...

correct output
2
2
2
2
2
...

user output
2
2
2
2
2
...

Test 11

Verdict: ACCEPTED

input
100
189 48 295 293 281 74 10000 10...

correct output
2
2
2
2
2
...

user output
2
2
2
2
2
...

Test 12

Verdict: ACCEPTED

input
100
37 10000 10000 10000 137 58 10...

correct output
5
4
4
4
3
...

user output
5
4
4
4
3
...

Test 13

Verdict: ACCEPTED

input
100
37 10000 10000 10000 137 58 10...

correct output
5
2
2
2
2
...

user output
5
2
2
2
2
...

Test 14

Verdict: ACCEPTED

input
100
37 10000 10000 10000 137 58 10...

correct output
5
2
2
2
2
...

user output
5
2
2
2
2
...

Test 15

Verdict: ACCEPTED

input
1000
117690 118480 116698 116498 73...

correct output
3
3
3
3
3
...

user output
3
3
3
3
3
...

Test 16

Verdict: ACCEPTED

input
1000
117690 118480 116698 116498 73...

correct output
3
2
2
2
2
...

user output
3
2
2
2
2
...

Test 17

Verdict: ACCEPTED

input
1000
117690 118480 116698 116498 73...

correct output
3
2
2
2
2
...

user output
3
2
2
2
2
...

Test 18

Verdict: ACCEPTED

input
1000
1709 376 1086 1000000 3107 278...

correct output
4
4
4
4
4
...

user output
4
4
4
4
4
...

Test 19

Verdict: ACCEPTED

input
1000
1000000 1000000 1000000 100000...

correct output
3
2
2
3
3
...

user output
3
2
2
3
3
...

Test 20

Verdict: ACCEPTED

input
1000
2951 1970 2237 1000000 1057 25...

correct output
3
3
3
3
3
...

user output
3
3
3
3
3
...

Test 21

Verdict: ACCEPTED

input
10000
1000000000 1000000000 5855 100...

correct output
3
3
3
3
3
...

user output
3
3
3
3
3
...

Test 22

Verdict: ACCEPTED

input
10000
1000000000 1000000000 5855 100...

correct output
3
2
2
2
2
...

user output
3
2
2
2
2
...

Test 23

Verdict: ACCEPTED

input
10000
1000000000 1000000000 5855 100...

correct output
3
2
2
2
2
...

user output
3
2
2
2
2
...

Test 24

Verdict: ACCEPTED

input
10000
19032 1470 1806 23678 10000000...

correct output
5
3
3
3
3
...

user output
5
3
3
3
3
...

Test 25

Verdict: ACCEPTED

input
10000
14039 13924 27761 8322 8912 68...

correct output
6
6
6
6
6
...

user output
6
6
6
6
6
...

Test 26

Verdict: ACCEPTED

input
10000
14880 1000000000 1000000000 10...

correct output
9
9
3
3
3
...

user output
9
9
3
3
3
...

Test 27

Verdict:

input
50000
1000000000000 364674496414 128...

correct output
4
4
4
4
4
...

user output
(empty)

Test 28

Verdict:

input
50000
1000000000000 364674496414 128...

correct output
4
2
2
2
2
...

user output
(empty)

Test 29

Verdict:

input
50000
1000000000000 364674496414 128...

correct output
4
2
3
3
2
...

user output
(empty)

Test 30

Verdict:

input
50000
1000000000000 60494 106399 100...

correct output
12
11
10
10
10
...

user output
(empty)

Test 31

Verdict:

input
50000
137138 68579 80891 12876 12790...

correct output
12
3
3
3
3
...

user output
(empty)

Test 32

Verdict:

input
50000
1000000000000 18780 1000000000...

correct output
13
3
3
3
3
...

user output
(empty)

Test 33

Verdict:

input
50000
1000000000000 1000000000000 10...

correct output
4
4
4
4
4
...

user output
(empty)

Test 34

Verdict:

input
50000
1000000000000 1000000000000 10...

correct output
4
2
2
2
2
...

user output
(empty)

Test 35

Verdict:

input
50000
1000000000000 1000000000000 10...

correct output
4
2
2
2
2
...

user output
(empty)

Test 36

Verdict:

input
50000
29257 1000000000000 11645 2409...

correct output
14
14
14
12
12
...

user output
(empty)

Test 37

Verdict:

input
50000
14532 1000000000000 17273 2604...

correct output
13
2
2
2
2
...

user output
(empty)

Test 38

Verdict:

input
50000
1000000000000 13888 1000000000...

correct output
14
14
12
12
12
...

user output
(empty)

Test 39

Verdict:

input
50000
1000000000000 1000000000000 10...

correct output
6
6
6
6
5
...

user output
(empty)

Test 40

Verdict:

input
50000
1000000000000 1000000000000 10...

correct output
6
4
4
3
3
...

user output
(empty)

Test 41

Verdict:

input
50000
1000000000000 1000000000000 10...

correct output
6
3
3
3
3
...

user output
(empty)

Test 42

Verdict:

input
50000
1000000000000 1000000000000 10...

correct output
28
25
25
25
25
...

user output
(empty)

Test 43

Verdict:

input
50000
1 1 1 1 1 1 1 1000000000000 1 ...

correct output
27
2
2
2
2
...

user output
(empty)

Test 44

Verdict:

input
50000
1000000000000 1000000000000 10...

correct output
27
24
22
22
7
...

user output
(empty)

Test 45

Verdict:

input
50000
100000 100000 100000 100000 10...

correct output
2
2
2
2
2
...

user output
(empty)

Test 46

Verdict:

input
50000
100000 100000 100000 100000 10...

correct output
2
2
2
2
2
...

user output
(empty)

Test 47

Verdict: ACCEPTED

input
50000
100000 100000 100000 100000 10...

correct output
2
2
2
2
2
...

user output
2
2
2
2
2
...

Test 48

Verdict:

input
50000
100000 100000 100000 100000 10...

correct output
2
2
2
2
2
...

user output
(empty)

Test 49

Verdict: ACCEPTED

input
50000
722 100000 100000 5989 100000 ...

correct output
2
2
2
2
2
...

user output
2
2
2
2
2
...

Test 50

Verdict:

input
50000
9132 100000 100000 100000 3077...

correct output
2
2
2
2
2
...

user output
(empty)

Test 51

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
5
5
5
5
5
...

user output
(empty)

Test 52

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
5
2
2
2
2
...

user output
(empty)

Test 53

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
5
2
2
2
2
...

user output
(empty)

Test 54

Verdict:

input
100000
12649 85081 263931 249102 9739...

correct output
10
6
6
6
6
...

user output
(empty)

Test 55

Verdict:

input
100000
1000000000000 113645 43822 250...

correct output
10
3
3
3
3
...

user output
(empty)

Test 56

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
11
3
3
3
3
...

user output
(empty)

Test 57

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
5
5
5
5
5
...

user output
(empty)

Test 58

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
5
2
2
2
2
...

user output
(empty)

Test 59

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
5
5
5
5
2
...

user output
(empty)

Test 60

Verdict:

input
100000
41613 13664 63607 100000000000...

correct output
11
11
11
10
10
...

user output
(empty)

Test 61

Verdict:

input
100000
1000000000000 40692 1000000000...

correct output
11
2
2
2
2
...

user output
(empty)

Test 62

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
12
8
2
2
2
...

user output
(empty)

Test 63

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
5
5
5
5
5
...

user output
(empty)

Test 64

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
5
3
3
3
3
...

user output
(empty)

Test 65

Verdict:

input
100000
1000000000000 1000000000000 10...

correct output
5
5
3
3
3
...

user output
(empty)

Test 66

Verdict:

input
100000
1 1 1 1 1 1 1 1000000000000 1 ...

correct output
27
25
25
25
25
...

user output
(empty)

Test 67

Verdict:

input
100000
1 1 1000000000000 100000000000...

correct output
26
6
6
5
3
...

user output
(empty)

Test 68

Verdict:

input
100000
1000000000000 1000000000000 1 ...

correct output
26
5
5
5
5
...

user output
(empty)

Test 69

Verdict:

input
100000
279 1623 100000 100000 100000 ...

correct output
3
3
3
3
3
...

user output
(empty)

Test 70

Verdict:

input
100000
279 1623 100000 100000 100000 ...

correct output
3
3
3
3
3
...

user output
(empty)

Test 71

Verdict:

input
100000
279 1623 100000 100000 100000 ...

correct output
3
3
3
3
3
...

user output
(empty)

Test 72

Verdict:

input
100000
8815 100000 100000 100000 1000...

correct output
2
2
2
2
2
...

user output
(empty)

Test 73

Verdict:

input
100000
20748 100000 100000 20644 1000...

correct output
2
2
2
2
2
...

user output
(empty)

Test 74

Verdict:

input
100000
21734 6649 26577 100000 8081 5...

correct output
2
2
2
2
2
...

user output
(empty)