제출 #587006

#제출 시각아이디문제언어결과실행 시간메모리
587006mosiashvililuka마상시합 토너먼트 (IOI12_tournament)C++14
17 / 100
1086 ms10452 KiB
#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,e,i,j,ii,jj,zx,xc,tes,t,R,f[100009],seg[400009],seg2[400009],l,r,z,za,Z,msh[400009],cnt,mx[400009],ans[400009],g[100009];
vector <int> v[400009];
set <pair <int, int> > s;
set <pair <int, int> >::iterator it,tt;
void pushdown(int q, int w, int rr){
    if(q!=w){
        seg2[rr*2]+=seg2[rr];
        seg2[rr*2+1]+=seg2[rr];
    }
    seg[rr]+=seg2[rr];
    seg2[rr]=0;
}
void upd(int q, int w, int rr){
    pushdown(q,w,rr);
    if(q>r||w<l) return;
    if(q>=l&&w<=r){
        seg2[rr]=z;
        pushdown(q,w,rr);
        return;
    }
    upd(q,(q+w)/2,rr*2);
    upd((q+w)/2+1,w,rr*2+1);
    seg[rr]=max(seg[rr*2],seg[rr*2+1]);
}
void read(int q, int w, int rr){
    if(q==w){
        z=q;
        return;
    }
    pushdown(q,(q+w)/2,rr*2);
    pushdown((q+w)/2+1,w,rr*2+1);
    if(seg[rr*2]<Z){
        read((q+w)/2+1,w,rr*2+1);
    }else{
        read(q,(q+w)/2,rr*2);
    }
}
void dfs(int q, int w){
    if(q<=a){
        mx[q]=f[q];
        return;
    }
    for(vector <int>::iterator it=v[q].begin(); it!=v[q].end(); it++){
        if((*it)==w) continue;
        dfs((*it),q);
        mx[q]=max(mx[q],mx[(*it)]);
    }
}
void dfs2(int q, int w, int rr){
    if(mx[q]>R) rr=0;
    if(q<=a){
        ans[q]=rr-1;
        return;
    }
    for(vector <int>::iterator it=v[q].begin(); it!=v[q].end(); it++){
        if((*it)==w) continue;
        dfs2((*it),q,rr+1);
    }
}
int GetBestPosition(int NN, int CC, int RR, int *KK, int *SS, int *EE) {
    a=NN;tes=CC;R=RR;R++;
    for(i=2; i<=a; i++){
        f[i]=KK[i-2];f[i]++;
    }
    for(i=1; i<a; i++){
        g[i]=f[i+1];
    }
    zx=-1;xc=-1;
    for(ii=1; ii<=a; ii++){
        for(i=1; i<=a; i++){
            if(i<ii){
                f[i]=g[i];
                continue;
            }
            if(i==ii){
                f[i]=R;
                continue;
            }
            f[i]=g[i-1];
        }
        e=0;
        for(t=1; t<=tes; t++){
            c=SS[t-1]+1;d=EE[t-1]+1;
            int mx1=0,mx2=0,E=0;
            for(i=c; i<=d; i++){
                if(f[i]==R) E=1;
                if(mx1<f[i]){
                    mx1=f[i];mx2=i;
                }
            }
            if(E==1){
                if(mx1==R){
                    e++;
                }else{
                    break;
                }
            }
            f[c]=f[mx2];
            for(i=c+1; ; i++){
                j=i+(d-c);
                if(f[j]==0) break;
                f[i]=f[j];
            }
        }
        if(zx<e){
            zx=e;xc=ii;
        }
    }
    return xc-1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...