luogu P1165 日誌分析

2021-08-13 16:41:10 字數 1270 閱讀 4595

題目描述

m 海運公司最近要對旗下倉庫的貨物進出情況進行統計。目前他們所擁有的唯一記錄就是乙個記錄貨櫃進出情況的日誌。該日誌記錄了兩類操作:第一類操作為貨櫃入庫操作,以及該次入庫的貨櫃重量;第二類操作為貨櫃的出庫操作。這些記錄都嚴格按時間順序排列。貨櫃入庫和出庫的規則為先進後出,即每次出庫操作出庫的貨櫃為當前在倉庫裡所有貨櫃中最晚入庫的貨櫃。

出於分析目的,分析人員在日誌中隨機插入了若干第三類操作――查詢操作。分析日誌時,每遇到一次查詢操作,都要報告出當前倉庫中最大貨櫃的重量。

輸入輸出格式

輸入格式:

包含n+1 行:

第一行為1 個正整數n,對應於日誌內所含操作的總數。

接下來的n 行,分別屬於以下三種格式之一:

格式1: 0 x //一次貨櫃入庫操作,正整數x表示該次入庫的貨櫃的重量

格式2: 1 //一次貨櫃出庫操作,(就當時而言)最後入庫的貨櫃出庫

格式3: 2 //一次查詢操作,要求分析程式輸出當前倉庫內最大貨櫃的重量

當倉庫為空時你應該忽略出庫操作,當倉庫為空查詢時你應該輸出0。

輸出格式:

輸出行數等於日誌中查詢操作的次數。每行為乙個正整數,表示查詢結果。

說明

對於20%的資料,有n≤10;

對於40%的資料,有n≤1000;

對於100%的資料,有n≤200000,x≤10^8。

很裸的棧模擬,但是需要一些思考,難點在於對查詢操作的處理上,假如僅僅

入棧就top++,退棧就top–,查詢呢?掃一遍得到?可是資料有200000,肯定要炸,how to do。我們可以想,我們每次查詢的最大值是否能放在乙個能夠o(1)查詢得到的地方,比如說棧頂?那退棧後怎麼辦呢?好的不用擔心,我們每次只需要把當前入棧的先更新為棧中最大值與當前數兩者之間的最大值,然後再壓入,由於不管如何訪問,如何退棧只對當前棧序列有影響,top以下的序列毫無影響,退棧後的序列的最大值仍在棧頂,這樣就好辦了。看**

#include 

#include

#include

#include

#include

using

namespace

std;

int steak[200001];

int main()

P1165 日誌分析

題目描述 mm 海運公司最近要對旗下倉庫的貨物進出情況進行統計。目前他們所擁有的唯一記錄就是乙個記錄貨櫃進出情況的日誌。該日誌記錄了兩類操作 第一類操作為貨櫃入庫操作,以及該次入庫的貨櫃重量 第二類操作為貨櫃的出庫操作。這些記錄都嚴格按時間順序排列。貨櫃入庫和出庫的規則為先進後出,即每次出庫操作出庫...

題解 P1165 日誌分析

原題 依舊是水題 基本思路 int stack 10005 void push int x 入棧 void pop 出棧 void calc 得出最大值當作者快樂地敲著 時,突發奇想 如果棧裡所儲存的都是最大值呢?帶著疑問,作者在草稿紙上演示幾遍,得出完整 作者蒟蒻。完整 include inclu...

Apche日誌系列 4 日誌分析

儘管日誌檔案中包含著大量有用的資訊,但這些資訊只有在經過深入挖掘之後才能夠最大限度地發揮作用。本文首先討論了能夠從日誌檔案獲得的資訊以及不能從日誌檔案獲得的資訊,然後介紹了幾種優秀的日誌分析工具以及如何自己程式設計分析日誌檔案。一 可以得到哪些資訊 4月4日 我們面臨的問題是,雖然日誌檔案中包含了大...