題目描述
諾諾表現、成績雙優,於是校長給她一筆money,讓她去外地玩玩。由於本地沒有飛機場,所以諾諾只能坐火車去咯。所以諾諾今天去火車站買票,卻看到了n多人在火車站裡啊,諾諾一陣頭暈。機靈的她突然發現,有n個人在隊伍裡(和上文的n毫無關係- -||),人們等得很無聊,於是他們開始轉來轉去,想在隊伍裡尋找自己的熟人。佇列中任意兩個人a和b,如果他們是相鄰或他們之間沒有人比a或b高,那麼他們是可以互相看得見的。
諾諾想計算出有多少對人可以互相看見,那麼你能幫幫諾諾嗎?
本題資料範圍:
40%的測試資料:n≤10000;
80%的測試資料:n≤100000;
100%的測試資料:n≤500000。
輸入格式
輸入的第一行包含乙個整數n (1≤n≤500 000), 表示隊伍中共有n個人;
接下來的n行中,每行包含乙個整數,表示人的高度,人的高度<10000。
輸出格式
輸出僅有一行,包含乙個數s,表示隊伍中共有s對人可以互相看見。
樣例輸入樣例輸出
單調棧。
這道題考慮到特殊資料,但是發現自己將特殊資料答案算錯了 5
5 5 3 5 5 8
開始一直算成9了,注意題目講的是
他們是相鄰或他們之間沒有人比a或b高,
不過這道題需要考慮到相等的情況。
#include #define ll long long
const int maxn = 500005;
int a[maxn], stack[maxn];
int main ( )
if ( j >= 0 ) //遍歷完就不需要加1,否則前面那個肯定是大於a[i]
ans ++;
stack[++ top] = a[i];
}else
//printf ( "**%d\n", ans );
}printf ( "%lld", ans );
return 0;}/*
55 5 3 5 5
8*/
佇列 優先佇列的學習
佇列定義 佇列是限定只能在表尾進行 插入,在表頭進行刪除的線性表 隊尾 允許插入的一端 隊頭 允許刪除的一端 佇列的定義 include queue 標頭檔案 using namespace std 需要加上使用名稱 空間,和sort 排序函式是一樣的。queue int q 格式 queue 型別...
佇列 迴圈佇列的實現
為了可以重新利用佇列底層陣列中已刪除元素所佔的空間,消除可能出現的 假滿 現象,將順序佇列改進為迴圈佇列。迴圈佇列是首尾相連的佇列 當front rear變數達到底層陣列的capacity 1之後,再向前以為就變成0.入隊 1 判斷佇列是否已滿,已滿丟擲越界異常 2 不滿的話把元素查到隊尾,並且re...
棧的佇列(佇列)
二.關於佇列的簡單實現。順序佇列的基本實現和順序棧的實現基本相似。順序佇列在出列和入列的時候會使佇列整體向上移動,會浪費一定的空間。因此出現了一種佇列叫做迴圈佇列。迴圈佇列可以實現空間的重複利用,大大節省了空間。關於迴圈佇列的實現 建立乙個空佇列 struct node struct node in...