#include <cstdio> #include <algorithm> #include <vector> #include <map> using namespace std; long long o[1300001]; int pot[1300002]; int main() { int n; vector < int > A; scanf("%d", &n); for (int i = 0; i < n; i++) { int l; scanf("%d", &l); A.push_back(l); } sort(A.begin(), A.end()); int last=0; for(int i = 0; i < n; i++) { int sum=0; for (int j=i; A[i]==A[j] && j < n; j++) { // sumujemy te same, aby miec ich ilosc sum++; i=j; } int poz=0; while(sum) { if(sum & 1) { // zamieniamy je na potegi 2 o[A[i] + poz]++; last = (last < A[i]+poz ? A[i]+poz : last); } poz++; sum >>=1; } } int L= last; for(int i =0; i <= L + 1 ;i++) { int sum=o[i]; int poz=0; while(sum) { if (sum & 1) { if (poz) o[i+poz]++; L=(L < i+poz ? i+poz : L); } poz++; sum >>=1; } } printf("%d", L); 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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include <cstdio> #include <algorithm> #include <vector> #include <map> using namespace std; long long o[1300001]; int pot[1300002]; int main() { int n; vector < int > A; scanf("%d", &n); for (int i = 0; i < n; i++) { int l; scanf("%d", &l); A.push_back(l); } sort(A.begin(), A.end()); int last=0; for(int i = 0; i < n; i++) { int sum=0; for (int j=i; A[i]==A[j] && j < n; j++) { // sumujemy te same, aby miec ich ilosc sum++; i=j; } int poz=0; while(sum) { if(sum & 1) { // zamieniamy je na potegi 2 o[A[i] + poz]++; last = (last < A[i]+poz ? A[i]+poz : last); } poz++; sum >>=1; } } int L= last; for(int i =0; i <= L + 1 ;i++) { int sum=o[i]; int poz=0; while(sum) { if (sum & 1) { if (poz) o[i+poz]++; L=(L < i+poz ? i+poz : L); } poz++; sum >>=1; } } printf("%d", L); return 0; } |