51nod 1952 栈
如果只是从尾端插入,那么问题就是基础的:求取栈内最大值的问题,这用单调栈解决即可。
但是前端也能插入,一般的单调栈已经不能满足。那么想象,如果在前端插入一个小值,相当于在栈底多加一个值罢了。但若加入一个大值呢?则需要把栈底的元素从下面逐个取出来,相当于这些比当前要插入的值“不曾存在过”,再从前端插入当前值。
由于涉及从前端插入,那么用双端队列实现双端的单调栈即可。
#include <stdio.h>
#include <deque>
using namespace std; #define ll long long
#define pb push_back
#define pf push_front const ll maxN=1e7+;
ll n, A, B, C, x, a, b, MOD;
ll M = 1e9 + , ans;
deque<ll> dq, stk; int main() {
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif
scanf("%lld%lld%lld%lld %lld%lld%lld%lld",
&n, &A, &B, &C, &x, &a, &b, &MOD);
ans = ;
for (ll i = ; i <= n; ++i) {
x = (x * a + b) % MOD;
ll xabc = x % (A + B + C);
if (xabc < A || dq.size() <= ) {
dq.pb(x);
if (stk.empty() || x >= stk.back())
stk.push_back(x);
ans = (ans + stk.back()) % M;
} else if (A <= xabc && xabc < A + B){
dq.pf(x);
while (stk.size() && x > stk.front())
stk.pop_front();
stk.push_front(x);
ans = (ans + stk.back()) % M;
} else if (A + B <= xabc) {
ll out = dq.back();
dq.pop_back();
if (out == stk.back())
stk.pop_back();
ans = (ans + stk.back()) % M;
}
}
printf("%lld\n", ans);
return ;
}
51nod 1952 栈的更多相关文章
- 51nod 1952 栈(单调队列)
用deque实时维护栈的情况. 数加入栈顶部,删掉栈顶部的数,相当于加入一个数,删掉最早出现的数,每次求最大值,这个直接记录一下就好了. 数加入栈底部,删掉栈顶部的数,相当于加入一个数,删掉最晚出现的 ...
- 51Nod 1289 大鱼吃小鱼 栈模拟 思路
1289 大鱼吃小鱼 栈模拟 思路 题目链接 https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1289 思路: 用栈来模拟 ...
- 51nod 1437 迈克步(单调栈)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1437 题意: 思路: 单调栈题.求出以每个数为区间最大值的区间范围即可. ...
- 51nod 1102 面积最大的矩形 (单调栈)
链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 思路: 首先介绍下单调栈的功能:利用单调栈,可以找到从左/ ...
- 51nod 1102 面积最大的矩形(单调栈)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 题意: 思路: 做法就是求出每个长方形向左向右所能延伸的最大距离. ...
- 51nod 1279 单调栈
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1279 1279 扔盘子 题目来源: Codility 基准时间限制:1 ...
- 51nod 1215 单调栈/迭代
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1215 1215 数组的宽度 题目来源: Javaman 基准时间限制:1 ...
- 51nod 1102 单调栈
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 1102 面积最大的矩形 基准时间限制:1 秒 空间限制:1310 ...
- 51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1158 1158 全是1的最大子矩阵 基准时间限制:1 秒 空 ...
随机推荐
- 修复PHP支持的标准JSON数据格式
PHP的json_decode无法解析的JSON数据,代码如下: $json = "{rst:5,c:[ [1018485,2,0,0,0,0,'','0-0','','',2,0,2],[ ...
- DFT 工程师三大法宝的使用
众所周知,芯片主要由三大部分构成. 芯片示例-可见下图 1.与电路板和其他芯片的接口-IO pad 2.存放程序的空间-RAM和ROM 3.搭建逻辑电路的基本组件 –标准逻辑单元 DFT工程师所有的工 ...
- pureMVC与strangeIoc框架对比
前言 最近有机会了解到了StrangeIoc框架,就拿来跟自己比较熟悉的pureMVC进行一下简要的对比.这两套开源框架都是基于MVC模式的扩展,pureMVC是一个跨平台跨语言的MVC轻量级应用框架 ...
- IOS8添加启动图
在IOS8之后,可以用pdf矢量图添加启动图,昨天下班时没来得及弄,今天早上来试了下. 1.Images.xcassets中添加New Launch Image,并命名为Launch Screen,之 ...
- Python——第一个python程序helloworld
安装了Python的环境之后,就是编写Python的代码了. 首先,我们来写一个简单的“hello world” 新建一个空白的txt文本,将后缀改为.py 改了后缀之后即变为Python程序的图标 ...
- 获取服务器时间ajax
$.ajax({ type:"OPTIONS", url:"/", complete:function(x){ // alert(x.getResponseHe ...
- C# 批量 json 读取
// 方法一 //string test = "[{ 'CreateUser': 'CN=koujirou nishikawaOMHBK','CreateUserJ': '西川 公二郎'}, ...
- LeetCode 第二天后续(两数相加 python3)
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # sel ...
- springboot手动配置数据源:
@Configuration @EnableTransactionManagement @PropertySource(value = {"classpath:config/source.p ...
- NIO与Socket
一.Socket 的使用 1.单线程Socket的使用 /** * 单线程版本 * 问题描述:只能服务单个客户端 * 解决方案:多线程版本 */ public class Socket_V1 { pu ...