ACM数据结构-单调栈、队列

1.最大数

代码:

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <string>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <algorithm>
#include <map>

#define I scanf
#define OL puts
#define O printf
#define F(a,b,c) for(a=b;a<c;a++)
#define FF(a,b) for(a=0;a<b;a++)
#define FG(a,b) for(a=b-1;a>=0;a--)
#define LEN 200010
#define MAX 1<<30
#define V vector<int>
#define ll long long  

using namespace std;

inline ll max(ll a,ll b){
    return a>b?a:b;
}

int T,i;
ll D,t=0;
ll q[LEN],a[LEN];
int len=0;

int main(){
    freopen("最大数.txt","r",stdin);
    I("%d%lld",&T,&D);
    while(T--){
        char buf[10];
        ll num;
        I("%s%lld",buf,&num);
        if(buf[0]==‘A‘){
            a[++len]=(num+t)%D;
            for(i=len;i>=1;i--){
                if(q[i]<a[len])
                    q[i]=a[len];
                else break;
            }
        }else{
            printf("%lld\n",t=q[len-num+1]);
        }
    }
    return 0;
}

理解:


原文地址:https://www.cnblogs.com/TQCAI/p/8453236.html

时间: 2024-10-09 23:29:42

ACM数据结构-单调栈、队列的相关文章

HDU4252 ACM fighting(单调栈)

Description After Mr. B arrived in Warsaw, he was shocked by the skyscrapers and took several photos. But now when he looks at these photos, he finds in surprise that he isn't able to point out even the number of buildings in it. So he decides to wor

[数据结构]单调栈的基本应用2

[数据结构]单调栈的基本应用2 一.前言 单调栈的基本应用2是单调栈的基本应用1的延伸.应用2主要解决的是二维平面的一些问题. 二.基本应用2 虽然已经应用到二维平面,但是单调栈的思想并没有变化 更多应用的是延伸的位置.本质是ai的左/右第一个大于ai的元素位置 下面列举的一些平面内单调栈的例题: 例1: POJ2559 最大矩形面积 题目描述: 给定n个依次排列并且面积为1*hi的矩形,现求这个图形所包含最大的矩形的面积. 上图中7个矩形的h依次为2 1 4 5 1 3 3.注意题目有多组数据

数据结构——单调栈&amp;单调队列(解决滑动窗口问题)

单调队列解答: /*******************单调队列!=优先队列单调队列是为了保证队列内的元素具有单调性,在保持了元素原本顺序的同时,对元素进行了过滤,舍弃了会影响单调性的元素而优先队列本质上还是个队列不会舍弃任何元素,每个元素都在队列之中,但是在队列中的位置由优先队列定义的优先级来确定,损失了原数组中的数据相对位置关系.所以很显然,单调队列是解决:寻找在某元素左侧区间或者右侧区间的最值问题,而优先队列的应用是寻找整个区间内的最高优先级别的内容./******************

Codeforces 547B. Mike and Feet[单调栈/队列]

这道题用单调递增的单调栈维护每个数能够覆盖的最大区间即可. 对于   1 2 3 4 5 4 3 2 1 6 这组样例, 1能够覆盖的最大区间是10,2能够覆盖的最大区间是7,以此类推,我们可以使用单调栈来实现这种操作. 具体看代码: *Code: #include<bits/stdc++.h> using namespace std; int n,l[200005],r[200005],ans[200005],a[200005]; int stk[200005],top=0; void so

数据结构--单调栈--烽火台

京东笔试编程题:烽火台,动态规划解法| Hexo https://www.nowcoder.com/discuss/8704?type=0&order=0&pos=5&page=0 战争游戏的至关重要环节就要到来了,这次的结果将决定王国的生死存亡,小B负责首都的防卫工作.首都处于一个四面环山的盆地中,周围的n个小山构成一个环,作为预警措施,小B计划在每个小山上设置一个观察哨,日夜不停的瞭望周围发生的情况. 一旦发生外敌入侵事件,山顶上的岗哨将点燃烽烟.若两个岗哨所在的山峰之间没有更

数据结构--单调栈--求最大子矩阵的大小

求最大子矩阵的大小给定一个整型矩阵map, 其中的值只有0和1两种, 求其中全是1的所有矩形区域中, 最大的矩形区域为1的数量.例如:1 1 1 0其中, 最大的矩形区域有3个1, 所以返回3.再如:1 0 1 11 1 1 11 1 1 0其中, 最大的矩形区域有6个1, 所以返回6. 解:将其放到一个矩阵中,同时从第0行开始计算,以该行打底时,直方图的最大面积 如第0行,数组为[1, 0, 1, 1] 此时按照下面的求直方图最大面积. 然后以第1行打底,此时数组为[2, 1, 2, 2],同

【图解数据结构】 栈&amp;队列

[TOC] 勤于总结,持续输出! 1.栈 1.1栈的定义 栈(stack)是限定在表尾进行插入和删除的操作的线性表. 我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不包含任何数据元素的栈称为空栈.栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构. 栈的插入操作,叫做进栈,也称压栈.入栈. 栈的删除操作,叫做出栈,也称弹栈. 1.2栈的顺序存储结构及实现 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化. 用数组实现

线性表的比较和抽象数据结构(栈&amp;队列)的实现方式

链表的两种底层结构 1.ArrayList实现单链表(其实就是一个顺序数组) ArrayList其实就是一组长度可变的数组,当实例化了一个ArrayList,该数据也被实例化了,当向集合中添加对象时,数组的大小也随着改变,这样它所带来的有优点是快速的随机访问(数组可以利用下标直接访问),即使访问每个元素所带来的性能问题也是很小的,但缺点就是想其中添加或删除对象速度慢,当你创建的数组是不确定其容量,所以当我们改变这个数组时就必须在内存中做很多的处理,如你想要数组中任意两个元素中间添加对象,那么在内

数据结构--单调栈结构

解决的问题:在一个数组中,每一个位置的num,找到左边离num近的>num的值,和右边离num近的>num的值 时间复杂度:O(N) 准备一个栈:栈底到栈顶  从大到小 遍历数组,将数组中的元素num依次入栈,同时保证栈中的元素比num大,如果num大于栈中的元素,则将栈中的元素弹出,同时记录弹出元素的结果,num就是弹出元素右边离它近的大于它的,栈中它挨着的元素就是左边离它近的大于它的元素. 一直出栈,直到栈中元素大于将要入栈的元素,或者栈为空停止 当数组遍历完后,栈中的元素依次弹出,此时它