#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; } |