Submission #31236

# Submission time Handle Problem Language Result Execution time Memory
31236 2017-08-15T04:39:45 Z pasa3232 Jousting tournament (IOI12_tournament) C++14
100 / 100
106 ms 6288 KB
#include<bits/stdc++.h>
#define inbuf_len 1 << 16
#define outbuf_len 1 << 16
using namespace std;

int n, m, r, ans, M=-1, A[100010], data[100010], sum[100010], tree[400010], check[100010];

void make_tree(int node, int s, int e){
    if(s==e){
        tree[node]=1;
        return;
    }
    int m=s+e>>1;
    make_tree(node*2, s, m);
    make_tree(node*2+1, m+1, e);
    tree[node]=tree[node*2]+tree[node*2+1];
}

void update(int node, int s, int e, int s1, int e1){
    if(e<s1||e1<s) return;
    if(s1<=s&&e<=e1){
        tree[node]=0;
        return;
    }
    int m=s+e>>1;
    update(node*2, s, m, s1, e1);
    update(node*2+1, m+1, e, s1, e1);
    tree[node]=tree[node*2]+tree[node*2+1];
}

int gets(int node, int s, int e, int val){
    int m=s+e>>1;
    if(tree[node]==e-s+1&&tree[node]==val) return e;
    if(tree[node*2]>=val) return gets(node*2, s, m, val);
    return gets(node*2+1, m+1, e, val-tree[node*2]);
}

int gete(int node, int s, int e, int val){
    int m=s+e>>1;
    if(tree[node]==val) return e;
    if(s==e) return -1;
    if(tree[node*2]>val) return gete(node*2, s, m, val);
    if(tree[node*2]<val) return gete(node*2+1, m+1, e, val-tree[node*2]);
    if(tree[node*2]==val) return max(gete(node*2, s, m, val), gete(node*2+1, m+1, e, val-tree[node*2]));
}

int GetBestPosition(int N, int C, int R, int *K, int *S, int *E){
    n=N, m=C, r=R;
    for(int i=0; i<n; i++){
        if(K[i]>r) data[i]=1;
        sum[i]=data[i];
        if(i>0) sum[i]+=sum[i-1];
    }
    make_tree(1, 0, n-1);
//    for(int i=1; i<=9; i++) printf("%d ", tree[i]); puts("");
    for(int i=0; i<m; i++){
        int x=S[i], y=E[i], s, e, ch=1;
        s=gets(1, 0, n-1, x+1);
        e=gete(1, 0, n-1, y+1);
        update(1, 0, n-1, s+1, e);
        if(sum[e-1]-(s-1>=0?sum[s-1]:0)>=1) ch=0;
        A[s]+=ch, A[e+1]+=-ch;
//        printf("%d %d %d %d %d\n", x, y, s, e, ch);
    }
    for(int i=0; i<=n; i++){
        if(i>0) A[i]+=A[i-1];
        if(M<A[i]) M=A[i], ans=i;
    }
    return ans;
}

Compilation message

tournament.cpp: In function 'void make_tree(int, int, int)':
tournament.cpp:13:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     int m=s+e>>1;
            ^
tournament.cpp: In function 'void update(int, int, int, int, int)':
tournament.cpp:25:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     int m=s+e>>1;
            ^
tournament.cpp: In function 'int gets(int, int, int, int)':
tournament.cpp:32:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     int m=s+e>>1;
            ^
tournament.cpp: In function 'int gete(int, int, int, int)':
tournament.cpp:39:12: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     int m=s+e>>1;
            ^
tournament.cpp:45:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 5144 KB Output is correct
2 Correct 0 ms 5144 KB Output is correct
3 Correct 0 ms 5144 KB Output is correct
4 Correct 0 ms 5144 KB Output is correct
5 Correct 0 ms 5144 KB Output is correct
6 Correct 0 ms 5144 KB Output is correct
7 Correct 0 ms 5144 KB Output is correct
8 Correct 0 ms 5144 KB Output is correct
9 Correct 0 ms 5144 KB Output is correct
10 Correct 0 ms 5144 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 5144 KB Output is correct
2 Correct 3 ms 5276 KB Output is correct
3 Correct 0 ms 5144 KB Output is correct
4 Correct 6 ms 5276 KB Output is correct
5 Correct 3 ms 5276 KB Output is correct
6 Correct 3 ms 5144 KB Output is correct
7 Correct 3 ms 5276 KB Output is correct
8 Correct 0 ms 5276 KB Output is correct
9 Correct 0 ms 5144 KB Output is correct
10 Correct 6 ms 5280 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 46 ms 5540 KB Output is correct
2 Correct 106 ms 6288 KB Output is correct
3 Correct 23 ms 5536 KB Output is correct
4 Correct 79 ms 6288 KB Output is correct
5 Correct 66 ms 6252 KB Output is correct
6 Correct 66 ms 6024 KB Output is correct
7 Correct 79 ms 6288 KB Output is correct
8 Correct 79 ms 6288 KB Output is correct
9 Correct 13 ms 5536 KB Output is correct
10 Correct 36 ms 5536 KB Output is correct