Submission #865715

# Submission time Handle Problem Language Result Execution time Memory
865715 2023-10-24T14:39:02 Z jk410 Jousting tournament (IOI12_tournament) C++17
100 / 100
88 ms 5540 KB
#include <iostream>
#include <algorithm>
using namespace std;
int N;
int Tree[1<<18],Tree2[1<<18];
int Ans[100001];
int init(int l,int r,int n){
    if (l==r)
        return Tree[n]=1;
    int m=(l+r)>>1;
    return Tree[n]=init(l,m,n<<1)+init(m+1,r,n<<1|1);
}
void propagate(int l,int r,int n){
    if (l<r&&!Tree[n])
        Tree[n<<1]=Tree[n<<1|1]=0;
}
int query(int x,int l,int r,int n){
    propagate(l,r,n);
    if (l==r){
        if (x==1)
            return l;
        return l+1;
    }
    int m=(l+r)>>1;
    if (Tree[n<<1]<x)
        return query(x-Tree[n<<1],m+1,r,n<<1|1);
    return query(x,l,m,n<<1);
}
int update(int lx,int rx,int l,int r,int n){
    propagate(l,r,n);
    if (r<lx||rx<l)
        return Tree[n];
    if (lx<=l&&r<=rx)
        return Tree[n]=0;
    int m=(l+r)>>1;
    return Tree[n]=update(lx,rx,l,m,n<<1)+update(lx,rx,m+1,r,n<<1|1);
}
int update2(int x,int v,int l,int r,int n){
    if (x<l||r<x)
        return Tree2[n];
    if (l==r)
        return Tree2[n]=v;
    int m=(l+r)>>1;
    return Tree2[n]=max(update2(x,v,l,m,n<<1),update2(x,v,m+1,r,n<<1|1));
}
int query2(int lx,int rx,int l,int r,int n){
    if (r<lx||rx<l)
        return -1;
    if (lx<=l&&r<=rx)
        return Tree2[n];
    int m=(l+r)>>1;
    return max(query2(lx,rx,l,m,n<<1),query2(lx,rx,m+1,r,n<<1|1));
}
int GetBestPosition(int _N, int C, int R, int *K, int *S, int *E){
    N=_N;
    init(0,N-1,1);
    for (int i=0; i<C; i++){
        int l=query(S[i]+1,0,N-1,1);
        int r=query(E[i]+2,0,N-1,1)-1;
        S[i]=l;
        E[i]=r;
        update(l+1,r,0,N-1,1);
    }
    for (int i=0; i<N-1; i++)
        update2(i,K[i],0,N-2,1);
    for (int i=0; i<C; i++){
        if (query2(S[i],E[i]-1,0,N-2,1)<R){
            Ans[S[i]]++;
            Ans[E[i]+1]--;
        }
    }
    for (int i=1; i<N; i++)
        Ans[i]+=Ans[i-1];
    return max_element(Ans,Ans+N)-Ans;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 2392 KB Output is correct
2 Correct 1 ms 2544 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 0 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 1 ms 2396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 4 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 4 ms 2396 KB Output is correct
5 Correct 4 ms 2396 KB Output is correct
6 Correct 3 ms 2396 KB Output is correct
7 Correct 4 ms 2396 KB Output is correct
8 Correct 4 ms 2396 KB Output is correct
9 Correct 1 ms 2392 KB Output is correct
10 Correct 4 ms 2396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 2920 KB Output is correct
2 Correct 83 ms 5464 KB Output is correct
3 Correct 24 ms 3932 KB Output is correct
4 Correct 81 ms 5436 KB Output is correct
5 Correct 88 ms 5540 KB Output is correct
6 Correct 62 ms 4932 KB Output is correct
7 Correct 82 ms 5524 KB Output is correct
8 Correct 83 ms 5484 KB Output is correct
9 Correct 20 ms 3864 KB Output is correct
10 Correct 24 ms 3768 KB Output is correct