日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

G - Bad Hair Day (单调栈)

發布時間:2025/4/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 G - Bad Hair Day (单调栈) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? G - Bad Hair Day?

題目描述

Farmer John的奶牛在風中凌亂了它們的發型……
每只奶牛都有一個身高hi(1 ≤ hi ≤ 1,000,000,000),現在在這里有一排全部面向右方的奶牛,一共有N只(1 ≤ N ≤ 80,000)。對于奶牛i來說,如果奶牛i+1,i+2,……,N這些奶牛的身高嚴格小于奶牛i,則奶牛i可以看到它們凌亂的發型。
比如下面這個例子:

* * * * = *
= * * * = *
= * - * = * 奶牛面向這邊-->
= * = * = *
= - = = = *
= = = = = =
1 2 3 4 5 6
('*'表示空的,這是譯者為了格式特意弄的,原題沒有)

令ci表示第i只奶牛能夠看到的發型數量,請計算c1 + c2 + c3 + … + cN的值
對于上面這個例子,答案為3 + 0 + 1 + 0 + 1 + 0=5。

輸入

第一行:奶牛數量N
第二到N+1行:第i+1行輸入奶牛i的身高

輸出

第一行:一個整數即c1到cN的和

樣例輸入

6
10
3
7
4
12
2

樣例輸出

5

?

?

?

首先我們先模擬一下:

身高:? ? ? ? ? ? ?10? ? ?3? ? ?7? ? 4? ? 12? ? 2

牛(下標):? 1? ? ? ?2? ? 3? ? ?4? ? 5? ? ? 6

就以牛1為例子進行模擬:

  • 首先,第一頭牛要看他前面的牛,那就讓牛1?入棧
  • 牛1要先和牛2比身高,如果牛2比他低,?則牛1可看到牛2,牛1仍然在棧頂,然后sum(牛1) += 1;
  • 牛1再看牛3,?發現又能看到? ,再加1;
  • 牛1繼續看,能看到牛4,?再加1;
  • 牛1再看牛5時,發現看不到,則牛1出棧,牛5入棧,改牛5看他前面的牛
  • .......................................
  • ? 從此過程不難看出,該題和單調棧息息相關,一直在維護棧頂元素

    ac代碼:

    /*該題利用了單調棧的性質,一直維護棧頂元素 ,棧頂元素每次看到的數字之和即為棧頂元素可以看到的所有數目*/ #include<cstdio> #include<iostream> #include<stack>using namespace std;const int maxn = 8*1e4+5; long long a[maxn];int main() {int n;scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%lld", &a[i]);stack<long long>S;S.push(a[0]);long long sum = 0;for(int i = 1; i < n; i++){while(S.size() > 0&&S.top() <= a[i]) S.pop();sum += S.size();S.push(a[i]);} printf("%lld\n", sum);return 0; }

    ?

    總結

    以上是生活随笔為你收集整理的G - Bad Hair Day (单调栈)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。