제출 #59049

#제출 시각아이디문제언어결과실행 시간메모리
59049Bodo171마상시합 토너먼트 (IOI12_tournament)C++14
0 / 100
32 ms4276 KiB
#include <vector>
#include <iostream>
using namespace std;
const int nmax=100005;
vector<int> v[nmax];
int aib[nmax],mx[nmax],wh[nmax],p[nmax],dp[nmax];
int n,i,j,st,dr,act,nod,maxim,opt;
inline int lbit(int x)
{
    return ((x^(x-1))&x);
}
void update(int poz,int val)
{
    for(int idx=poz;idx<=n;idx+=lbit(idx))
        aib[idx]+=val;
}
int get_kth(int k)
{
    int poz=0,curr=0;
    for(int p=16;p>=0;p--)
        if(poz+(1<<p)<=n&&curr+aib[poz+(1<<p)]<k)
           poz+=(1<<p),curr+=aib[poz];
    poz++;
    return poz;
}
int GetBestPosition(int N, int C, int R, int *K, int *S, int *E) {

  for(i=0;i<n-1;i++)
  {
      update(i+1,1);
  }
  for(i=0;i<C;i++)
  {
      st=S[i]+1;dr=E[i]+1;
      for(j=dr;j>=st;j--)
      {
          act=get_kth(j);
          mx[i]=max(mx[i],K[act-1]);
          if(p[act]) v[i].push_back(p[act]),mx[i]=max(mx[i],mx[p[act]]);
          if(j==st) p[act]=i;
          else update(act,-1);
      }
      if(mx[i]<=R)
      {
          dp[i]=1,wh[i]=act;
          for(j=0;j<v[i].size();j++)
          {
              nod=v[i][j];
              if(dp[nod]+1>dp[i]||(dp[nod]+1==dp[i]&&wh[nod]<dp[i]))
                dp[i]=dp[nod]+1,wh[i]=wh[nod];
          }
          if((dp[i]>maxim)||(dp[i]==maxim&&wh[i]<opt))
            maxim=dp[i],opt=wh[i];
      }
  }
  return opt;

}

컴파일 시 표준 에러 (stderr) 메시지

tournament.cpp: In function 'int GetBestPosition(int, int, int, int*, int*, int*)':
tournament.cpp:46:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
           for(j=0;j<v[i].size();j++)
                   ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...