• 51nod 1952 栈


    基准时间限制:1.5 秒 空间限制:262144 KB 分值: 80 难度:5级算法题
    LYK有一个栈,众所周知的是这个数据结构的特性是后进先出的。
    LYK感觉这样子不太美妙,于是它决定在这个前提下将其改进,也就是说,每次插入元素时,可以在栈顶或者栈底插入,删除元素时,只能在栈顶删除。
    LYK想知道每次执行完操作后当前栈中元素的最大值是多少。

    第一行一个数n表示操作次数。
    接下来n行,每行两个数a。若a<=1,则接下来输入一个数b。
    若a=0,则在栈顶插入一个数b。
    若a=1,则在栈底插入一个数b。
    若a=2,则在栈顶删除一个数。

    每次操作后,输出当前栈中元素的最大值是多少。
    保证任意时刻栈中至少含有一个数。

    由于操作数实在太多了。
    于是你可以采取这种方式读入所有操作。
    读入8个参数n,A,B,C,x0,a,b,MOD。 0<=A,B,C<=100000,A+B+C>0,0<=x0,a,b<=10^9,1<=MOD<=10^9,1<=n<=10000000。
    xi=(xi1a+b)%MOD 。
    对于第i次操作,若xi%(A+B+C)<A或者当前栈中元素<=1,则a=0,且b=xi。若A<=xi%(A+B+C)<A+B,则a=1,且b=xi,若A+B<=xi%(A+B+C),则a=2。

    输出可能很大,只需输出将所有答案的总和对1e9+7取模后的结果即可。
     
    样例解释:
    对应的xi:1 4 0 2 1
    对应的操作:
    0 1
    0 4
    0 0
    2
    1 1
     
    对应的答案:
    1
    4
    4
    4
    4
    Input
    一行8个参数,n,A,B,C,x0,a,b,MOD
    Output
    一行表示答案总和对1e9+7取模后的结果
    Input示例
    5 1 1 1 2 2 2 5
    Output示例
    17

    题解:
      这个题目,我是水过去的,发现multiset,map+priority都因为常数太大所以TLE了,所以我们考虑只用两个priority,一个维护当前的最大值,一个维护当前要删除数的集合,所以,对于当前我们要删除的数,考虑把他加入第二个优先队列之中去而不正真删除,只有每次要取优先级最高的元素时,我们比较两个队列的最大元素,如果相同就删除,复杂度nlogn.
    代码:
    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cmath>
    #include <iostream>
    #include <queue>
    #include <map>
    #define RG register
    #define ll long long
    #define MAXN 10000100
    using namespace std;
    int q[MAXN*2],l=10000010,r=10000010-1,num=0;
    priority_queue<int> qq,qq2;
    ll n,A,B,C,xi,a,b,MOD,ans=0;
    int main()
    {
      scanf("%lld%lld%lld%lld%lld%lld%lld%lld",&n,&A,&B,&C,&xi,&a,&b,&MOD);
      for(RG ll i=1;i<=n;i++){
        xi=(xi*a+b)%MOD;
        if(xi%(A+B+C)<A||r-l+1<=1)
          q[--l]=xi,qq.push(xi);
        else if(xi%(A+B+C)>=A&&xi%(A+B+C)<A+B)
          q[++r]=xi,qq.push(xi);
        else{
          qq2.push(q[l++]);
        }
        while(!qq2.empty()&&qq2.top()==qq.top()) qq2.pop(),qq.pop();
        ans=(ans+qq.top())%1000000007;
      }
      printf("%lld",ans);
      return 0;
    }
  • 相关阅读:
    Webpack 入门学习
    如何把百度地图引入自己的网页中
    哗啦啦Python之路 Day 1 数据类型,运算符和表达式
    哗啦啦python之路 Day 2 程序控制结构
    找个轻量级的Log库还挺难
    W32.Downadup.autorun病毒的清除
    一个VxWorks源代码网站
    VisualSVNServer无法卸载也无法安装,报告不是有效的MOF文件(0x8004401e)错误
    如何用Visual Studio 2005编译Wireshark的插件
    TAU G2中的BitString和OctetString
  • 原文地址:https://www.cnblogs.com/renjianshige/p/7794817.html
Copyright © 2020-2023  润新知