Ivan has got an array of n non-negative integers a1, a2, ..., an. Ivan knows that the array is sorted in the non-decreasing order.
Ivan wrote out integers 2a1, 2a2, ..., 2an on a piece of paper. Now he wonders, what minimum number of integers of form 2b (b ≥ 0)need to be added to the piece of paper so that the sum of all integers written on the paper equalled 2v - 1 for some integer v (v ≥ 0).
Help Ivan, find the required quantity of numbers.
The first line contains integer n (1 ≤ n ≤ 105). The second input line contains n space-separated integers a1, a2, ..., an(0 ≤ ai ≤ 2·109). It is guaranteed that a1 ≤ a2 ≤ ... ≤ an.
Print a single integer — the answer to the problem.
4
0 1 1 1
0
1
3
set数据结构的应用,
#include<iostream> #include<cstdio> #include<set> using namespace std; set<int> s; int main() { int n,maxn=0; scanf("%d",&n); for(int i=0;i<n;i++) { int num; scanf("%d",&num); while(s.count(num)) { s.erase(num); num++; } s.insert(num); maxn=max(maxn,num); } printf("%d\n",maxn-s.size()+1); return 0; }
本文介绍了一个关于整数数组的算法问题,数组已按非递减顺序排序。目标是最小化需要添加到数组中的2的次幂数量,以便使数组总和成为2的某个幂次减一。文章提供了完整的C++实现代码,利用了set数据结构来确保数组中每个元素的唯一性,并有效地进行计算。
426

被折叠的 条评论
为什么被折叠?



