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