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