題意:有n個部落圍成一圈,每個部落都有乙個高度,如果兩個部落之間的部落高度都低於這兩個部落的高度,那麼這兩個部落則互相可見,乙個部落從順時針或逆時針方向看到另乙個部落都算互相可見
題解:單調棧
乙個部落從順時針方向看到與它互相可見的部落,一定是一段連續遞增的序列,逆時針同理
這就很像單調棧的維護方式
先把最大的點砍掉,斷環為鏈
然後對於每個點順時針和逆時針的貢獻都用單調棧統計一次
最後再把最大點的貢獻算一遍
#include#include#include#include#include#include#define ll long longusing namespace std;
const int n = 1000010;
int n,mx,top;
int a[n],v[n],stk[n],same[n],bj[n],l[n],r[n];
ll ans;
int gi()
int main()
for(int i=mx; i<=n; i++) v[++top]=a[i];
for(int i=1; i<=mx-1; i++) v[++top]=a[i];
top=0;
for(int i=2; i<=n; i++)
top=0,stk[top]=n+1;
for(int i=n; i>=2; i--)
r[i]=stk[top];
stk[++top]=i;
} for(int i=2; i<=n; i++)
mx=0;
for(int i=2; i<=n; i++)
mx=0;
for(int i=n; i>=2; i--)
for(int i=2; i<=n; i++) ans+=bj[i];
printf("%lld", ans);
return 0;
}
51Nod 1482 部落訊號(單調棧)
乙個長度為 n n 的環 a role presentation style position relative a a,如果環上有一對數 x,y x,y 當連線 x,y x,y 的兩對弧中任意一對上不存在比 mi n min 大的數,則稱 x,y x,y 可以互相看見,問有多少對數可以互相看見。3...
51nod 貪心入門
有若干個活動,第i個開始時間和結束時間是 si,fi 活動之間不能交疊,要把活動都安排完,至少需要幾個教室?分析 能否按照之一問題的解法,每個教室安排盡可能多的活動,即按結束時間排序,再貪心選擇不衝突的活動,安排乙個教室之後,剩餘的活動再分配乙個教室,繼續貪心選擇 反例 a 1,2 b 1,4 c ...
51nod 迷宮問題
1459 迷宮遊戲 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 你來到乙個迷宮前。該迷宮由若干個房間組成,每個房間都有乙個得分,第一次進入這個房間,你就可以得到這個分數。還有若干雙向道路鏈結這些房間,你沿著這些道路從乙個房間走到另外乙個房間需要一些時間。遊戲規定了你的...