#include "stdio.h"
int i,j,n,x,a,poz,maxpoz=0;
unsigned long long kom[4000],bitx[67],bitpoz,last,maska63;
int main() {
for(i=0;i<3300;i++){
kom[i] = 0LL;
}
bitx[0] = 1LL;
for(i=1;i<=63;i++){
bitx[i] = bitx[i-1]*2;
//printf("%I64u\n",bitx[i]);
}
last = bitx[63];
maska63 = last-1LL;
scanf(" %d",&n);
for(i=0;i<n;i++){
scanf(" %d",&a);
poz = a/63;
kom[poz]+=bitx[a%63];
//printf("%d %I64u\n",a%63,kom[poz]);
while(kom[poz]&last){
kom[poz]&=maska63;
kom[++poz]++;
}
if(maxpoz<poz)
maxpoz=poz;
}
bitpoz = last;
for(i=63;i>=0;i--)
{
if(kom[maxpoz]&bitpoz) break;
bitpoz/=2;
}
printf("%d\n",maxpoz*63+i);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #include "stdio.h" int i,j,n,x,a,poz,maxpoz=0; unsigned long long kom[4000],bitx[67],bitpoz,last,maska63; int main() { for(i=0;i<3300;i++){ kom[i] = 0LL; } bitx[0] = 1LL; for(i=1;i<=63;i++){ bitx[i] = bitx[i-1]*2; //printf("%I64u\n",bitx[i]); } last = bitx[63]; maska63 = last-1LL; scanf(" %d",&n); for(i=0;i<n;i++){ scanf(" %d",&a); poz = a/63; kom[poz]+=bitx[a%63]; //printf("%d %I64u\n",a%63,kom[poz]); while(kom[poz]&last){ kom[poz]&=maska63; kom[++poz]++; } if(maxpoz<poz) maxpoz=poz; } bitpoz = last; for(i=63;i>=0;i--) { if(kom[maxpoz]&bitpoz) break; bitpoz/=2; } printf("%d\n",maxpoz*63+i); return 0; } |
English