zoukankan      html  css  js  c++  java
  • codeforces_305C_STLset

    C. Ivan and Powers of Two
    time limit per test
    0.5 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    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.

    Input

    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.

    Output

    Print a single integer — the answer to the problem.

    Examples
    input
    4
    0 1 1 1
    output
    0
    input
    1
    3
    output
    3

    set数据结构的应用,
    #include <set>
    一个集合(set)是一个容器,它其中所包含的元素的值是唯一的。
    集和多集的区别是:set支持唯一键值,set中的值都是特定的,而且只出现一次;而multiset中可以出现副本键,同一值可以出现多次。
     
    begin() 返回指向第一个元素的迭代器
    clear() 清除所有元素
    count() 返回某个值元素的个数
    empty() 如果集合为空,返回true(真)
    end() 返回指向最后一个元素之后的迭代器,不是最后一个元素
    equal_range() 返回集合中与给定值相等的上下限的两个迭代器
    erase() 删除集合中的元素
    find() 返回一个指向被查找到元素的迭代器,如果没找到则返回end()
    get_allocator() 返回集合的分配器
    insert() 在集合中插入元素
    lower_bound() 返回指向大于(或等于)某值的第一个元素的迭代器
    key_comp() 返回一个用于元素间值比较的函数
    max_size() 返回集合能容纳的元素的最大限值
    rbegin() 返回指向集合中最后一个元素的反向迭代器
    rend() 返回指向集合中第一个元素的反向迭代器
    size() 集合中元素的数目
    swap() 交换两个集合变量
    upper_bound() 返回大于某个值元素的迭代器
    value_comp() 返回一个用于比较元素间的值的函数
     
    #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
    ",maxn-s.size()+1);
        return 0;
    }
  • 相关阅读:
    第六章 编译并运行程序
    第五章 顺序型编程进阶
    第四章 异常
    第三章 顺序型编程
    TCP和UDP的区别和优缺点
    Java UDP Socket编程
    springboot 学习资源推荐
    springboot集成redis
    微信公众号的SpringBoot+Quartz的定时任务Demo
    远程桌面发生身份验证错误,要求的函数不受支持【WIN10家庭】或【专业版】--解决办法
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/5399502.html
Copyright © 2011-2022 走看看