竹子听

#include<cstdio>

#include<cstring>

int max(int x,int y)

{

return x>y?x:y;

}

int Log(int x)

{

int c=1;

while(x!=1)

{

x=x>>1;

c++;

}

return c;

}

int main()

{

int n,s[1000][3],word[1000],N;

scanf("%d",&n);

memset(s,0,sizeof(s));

memset(word,0,sizeof(word));

for(int i=1;i<=n;i++) scanf("%d",&word[i]);

N=Log(n);

for(int i=1;i<=n;i++) s[i][0]=word[i];

for(int j=1;j<=N;j++)

{

for(int i=1;i<=n,(i+1<<j)<=n;i++)

{

s[i][j]=max(s[i][j-1],s[i+(1<<(j-1))][j-1]);

printf("(%d,%d)->(%d,%d)+(%d,%d)\n",i,i+1<<j-1,i,i+(1<<(j-1))-1,i+1<<(j-1),i+1<<j-1);

}

}

printf("%d ",s[1][2]);

}


评论(2)