P2947 向右看齊

2021-09-25 07:10:30 字數 1182 閱讀 9980

約翰的n(1≤n≤10^5)頭奶牛站成一排,奶牛i的身高是hi(l≤hi≤1,000,000).現在,每只奶牛都在向右看齊.對於奶牛i,如果奶牛j滿足i第 1 行輸入 n,之後每行輸入乙個身高 h_i。

共 n 行,按順序每行輸出乙隻奶牛的最近仰望物件,如果沒有仰望物件,輸出 0。

632

6112

330

660

每次只在棧中存數字標號,進來乙個數,就把小於等於他的數全部彈出,若剩下有數,則答案是剩下的數,否則答案是0

因為若x小於當前數,x不會成為答案。

彈棧:

while

(!s.

empty()

&&a[s.

top()]

<=a[i]

) s.

pop(

);

更新:

if

(!s.

empty()

) f[i]

=s.top()

;else f[i]=0

;

存入:

s.

push

(i);

#include

#define m(a,b) memset(a,b,sizeof(a))

#define inf 0x3f3f3f3f

#define mod 100003

using

namespace std;

inline

void

read

(int

&x)while

(ch>=

'0'&& ch<=

'9')

if(c==

'-')x=

-x;}

stack<

int> s;

int a[

100005

],f[

100005];

int i,n;

intmain()

for(i=

1;i<=n;i++

)printf

("%d\n"

,f[i]);

return0;

}

洛谷P1330 封鎖陽光大學 前向星,bfs

題目 解題思路 1 點數 10000,邊數 100000,因此採用前向星存圖。2 圖可能不至乙個連通塊。遍歷點,若點染色為0,則bfs。bfs內以前向星遍歷邊,染色邊的端點,並記錄染色1與2的計數。ac include include includeusing namespace std int n...