• 湖南多校对抗赛(2015.03.28) H SG Value


    题意:给你一个集合,动态插入 ,动态询问,然后问你这个集合的sg值(这个集合用加法运算不能产生的那个最小正整数)是多少.

    解题思路:假设我们现在的这个SG值是 x  

    1)现在插入集合里面一个数v   如果这个v > x ,那么显然  sg值x不变,  把v放进从小到大的优先队列中

    2)如果这个 v <= x 那么sg值x肯定就会变成  x + v, 每更新一次 sg值,就去看优先队列top元素是否是 小于等于 x的 ,如果小于等于,其实就等于把这个top元素进行1操作,这样就不会错了。

    解题代码:

     1 // File Name: h.cpp
     2 // Author: darkdream
     3 // Created Time: 2015年03月28日 星期六 16时28分10秒
     4 
     5 #include<vector>
     6 #include<list>
     7 #include<map>
     8 #include<set>
     9 #include<deque>
    10 #include<stack>
    11 #include<bitset>
    12 #include<algorithm>
    13 #include<functional>
    14 #include<numeric>
    15 #include<utility>
    16 #include<sstream>
    17 #include<iostream>
    18 #include<iomanip>
    19 #include<cstdio>
    20 #include<cmath>
    21 #include<cstdlib>
    22 #include<cstring>
    23 #include<ctime>
    24 #include<queue>
    25 #define LL long long
    26 
    27 using namespace std;
    28 int t;
    29 priority_queue<int,vector<int>,greater<int> > qu;
    30 int main(){
    31     //freopen("input","r",stdin);
    32     //freopen("output","w",stdout);
    33     while(scanf("%d",&t)!= EOF)
    34     {
    35         while(!qu.empty())
    36             qu.pop();
    37         LL l,r;
    38         l = r = 0 ; 
    39         int op,v;
    40         for(int i = 1; i<= t ;i ++)
    41         {
    42             scanf("%d",&op);
    43             if(op == 1)
    44             {       
    45                 scanf("%d",&v);
    46                 if(v <= r +1)
    47                 {
    48                     r += v;
    49                     while(!qu.empty())
    50                     {
    51                         int tmp = qu.top();
    52                         if(tmp <= r+1)
    53                         {
    54                            r += tmp;
    55                            qu.pop();
    56                         }else{
    57                           break;
    58                         }
    59                     }
    60                 }else{
    61                     qu.push(v);
    62                 }
    63             }else{
    64                 printf("%lld
    ",r+1);
    65             }
    66         }
    67     }
    68     return 0;
    69 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    Python中pymssql 的使用操作
    Python连接mysql数据库及简单增删改查操作示例代码
    Python之模块和包的创建与使用
    SQL SERVER将多行数据合并成一行
    SQL Server根据子查询更新语句update
    在VMware虚拟机中安装windows server2016步骤详解(带图解)
    http请求错误合集
    第三方图标库(三)iconMoon
    第三方图标库学习(二)Font Awesome
    MapperScannerConfigurer的原理
  • 原文地址:https://www.cnblogs.com/zyue/p/4375267.html
Copyright © 2020-2023  润新知