Submission #671682

# Submission time Handle Problem Language Result Execution time Memory
671682 2022-12-13T14:04:34 Z 1bin Jousting tournament (IOI12_tournament) C++14
100 / 100
50 ms 3664 KB
#include <bits/stdc++.h>

using namespace std;

#define all(v) v.begin(), v.end()
typedef long long ll;
const int b = 1 << 17;
int n, c, R, k[b], s[b], e[b], seg[b << 1], l, r, seg2[b << 1], p[b];

void upd(int ix){
    ix += b;
    while(ix){
        seg[ix]--; ix /= 2;
    }
}

int go(int k){
    int ix = 1;
    while(ix < b){
        ix <<= 1;
        if(seg[ix] < k) k -= seg[ix++];
    }
    return ix - b;
}

int Max(int l, int r){
    int ret = 0;
    l += b; r += b;
    while(l <= r){
        if(l & 1) ret = max(ret, seg2[l++]);
        if(!(r & 1)) ret = max(ret,seg2[r--]);
        l /= 2; r /= 2;
    }
    return ret;
}

int GetBestPosition(int n, int c, int R, int k[], int s[], int e[]){
    for(int i = n - 1; i; i--) k[i] = k[i - 1];
    for(int i = 1; i <= n + 1; i++) seg[b + i] = 1, seg2[b + i] = k[i];
    for(int i = b - 1; i; i--) {
        seg[i] = seg[i * 2] + seg[i * 2 + 1];
        seg2[i] = max(seg2[i * 2], seg2[i * 2 + 1]);
    }
    for(int i = 0; i < c; i++){
        l = go(++s[i]); r = go(++e[i] + 1) - 1;
        if(Max(l, r - 1) < R) p[l]++, p[r + 1]--;
        for(int j = 0; j < e[i] - s[i]; j++) upd(go(s[i] + 1));
    }
    
    int idx, ret = -1;
    for(int i = 1; i <= n; i++){
        p[i] += p[i - 1];
        if(p[i] > ret) ret = p[i], idx = i;
    }
    return idx - 1;
}

/*
int main(void){
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    
    cin >> n >> c >> r;
    for(int i = 1; i < n; i++) cin >> k[i];
    for(int i = 0; i < c; i++) cin >> s[i] >> e[i];
    cout << GetBestPosition(n, c, r, k, s, e);
    return 0;
}*/

Compilation message

tournament.cpp: In function 'int GetBestPosition(int, int, int, int*, int*, int*)':
tournament.cpp:55:18: warning: 'idx' may be used uninitialized in this function [-Wmaybe-uninitialized]
   55 |     return idx - 1;
      |                  ^
# Verdict Execution time Memory Grader output
1 Correct 1 ms 1236 KB Output is correct
2 Correct 1 ms 1236 KB Output is correct
3 Correct 1 ms 1236 KB Output is correct
4 Correct 1 ms 1236 KB Output is correct
5 Correct 1 ms 1236 KB Output is correct
6 Correct 1 ms 1236 KB Output is correct
7 Correct 1 ms 1236 KB Output is correct
8 Correct 1 ms 1236 KB Output is correct
9 Correct 1 ms 1332 KB Output is correct
10 Correct 1 ms 1236 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 1236 KB Output is correct
2 Correct 3 ms 1364 KB Output is correct
3 Correct 2 ms 1364 KB Output is correct
4 Correct 3 ms 1364 KB Output is correct
5 Correct 3 ms 1364 KB Output is correct
6 Correct 3 ms 1364 KB Output is correct
7 Correct 3 ms 1364 KB Output is correct
8 Correct 3 ms 1372 KB Output is correct
9 Correct 2 ms 1364 KB Output is correct
10 Correct 4 ms 1364 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 23 ms 2316 KB Output is correct
2 Correct 50 ms 3628 KB Output is correct
3 Correct 26 ms 2952 KB Output is correct
4 Correct 50 ms 3600 KB Output is correct
5 Correct 48 ms 3560 KB Output is correct
6 Correct 45 ms 3284 KB Output is correct
7 Correct 49 ms 3572 KB Output is correct
8 Correct 49 ms 3664 KB Output is correct
9 Correct 17 ms 2932 KB Output is correct
10 Correct 20 ms 2964 KB Output is correct