记录编号 |
239097 |
评测结果 |
AAAAAAEEEEEEEEEEE |
题目名称 |
[Ural 1396] 最大值2 |
最终得分 |
35 |
用户昵称 |
GaoErFu |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.845 s |
提交时间 |
2016-03-19 18:00:28 |
内存使用 |
5.62 MiB |
显示代码纯文本
#include<stdio.h>
int c[10010]={0};//c数组用于储存要查询的数的序号。
int b[1000010][2]={0};//用于储存从1开始的到第N个数的各个数的对应值与最大值。
int cc()
{
freopen("Maximum.in","r",stdin);
freopen("Maximum.out","w",stdout);
int i=1,j,k,x,n,max1=0,max2=1;//max2为当前计算的最大值。
b[1][0]=1;
b[1][1]=1;
b[0][0]=0;
b[0][1]=0;
while(scanf("%d",&c[i])!=-1)
{if(max1<c[i])max1=c[i];i++;c[0]++;}//输入各个要查询的数的序号
for(i=2;i<=max1;i++)
{if(i%2==0&&i>=2)b[i][0]=b[i/2][0];
else b[i][0]=b[(i-1)/2][0]+b[(i-1)/2+1][0];
if(max2<b[i][0]){max2=b[i][0];}
b[i][1]=max2;
}
for(i=1;i<c[0];i++)
{printf("%d\n",b[c[i]][1]);}
return 0;
}
int a=cc();
int main(){;}