#include<set>
#include<iostream>
int tab[300000];
int main()
{
// std::multiset<int>s;
int n;
int l,l1,l2;
scanf("%d\n",&n);
while(n--)
{
scanf("%d",&l);
// s.insert(l);
tab[l]++;
}
/*
while(s.size()>1)
{
l1 = *s.begin();
s.erase(s.begin());
l2 = *s.begin();
if(l1==l2)
{
s.erase(s.begin());
s.insert(l1+1);
}
}
printf("%d\n",*s.begin());
*/
int max=0;
for(int i=0;i<299999;i++)
{
tab[i+1]+=tab[i]/2;
if(tab[i+1])max=i+1;
}
printf("%d\n",max);
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<set> #include<iostream> int tab[300000]; int main() { // std::multiset<int>s; int n; int l,l1,l2; scanf("%d\n",&n); while(n--) { scanf("%d",&l); // s.insert(l); tab[l]++; } /* while(s.size()>1) { l1 = *s.begin(); s.erase(s.begin()); l2 = *s.begin(); if(l1==l2) { s.erase(s.begin()); s.insert(l1+1); } } printf("%d\n",*s.begin()); */ int max=0; for(int i=0;i<299999;i++) { tab[i+1]+=tab[i]/2; if(tab[i+1])max=i+1; } printf("%d\n",max); return 0; } |
English