HDU5261 蜀道難 單調佇列

2021-07-03 10:55:51 字數 825 閱讀 6578

題意:中文題,他給的半徑實際上就是兩點之間的距離,然後要求找出兩個點的權值加上之間的距離最大。

a陣列表示每個點的權值,設兩個點分別是i,j,所以答案就是a[i]-i*r+a[j]+j*r,對於乙個j應該要找到滿足要求最大的a[i]-i*r,所以就用單調佇列了,還要注意就是單調佇列裡相等的話就直接加到隊尾,優先取編號小的。

#include#include#includeusing namespace std;

const int maxn=100010;

typedef long long ll;

typedef pairpoint;

int q[maxn<<1];

ll a[maxn<<1];

int main()

int front=0,rear=-1;

point ans;

ll aans=0;

q[++rear]=1;

for(i=2;i<=2*n;i++)

else if(front<=rear&&a[i]+a[q[front]]-q[front]*r+i*r==aans)

{point temp;

temp.first=min(q[front],i);

temp.second=max(q[front],i);

if(temp.first>n)

temp.first-=n;

if(temp.second>n)

temp.second-=n;

if(temp.first>temp.second)

swap(temp.first,temp.second);

if(temp

hdu 5261 蜀道難(deque 雙端佇列)

度度熊最近去四川遊玩了一趟,在西南邊,它發現了乙個神奇的地方,那裡有數不清的山,山腳的路組成了乙個完美的圓,而山均勻的坐落在這個圓上。此乃造物者之無盡藏也 它大發詩情的感慨道。山高皆不一,度度熊現在很想知道,距離最遠的兩座山頂是哪兩座山。由於山頂不能直接到達,從一座山頂到另一座山頂的唯一方法是,先下...

hdu1285 hdu4857 拓撲排序

一 原題內容 problem description 有n個比賽隊 1 n 500 編號依次為1,2,3,n進行比賽,比賽結束後,裁判委員會要將所有參賽隊伍從前往後依次排名,但現在裁判委員會不能直接獲得每個隊的比賽成績,只知道每場比賽的結果,即p1贏p2,用p1,p2表示,排名時p1在p2之前。現在...

樹狀陣列 hdu2689 hdu2838

題意 給定乙個正整數n,和乙個1 n的乙個排列,每個數可以和旁邊的兩個數的任意乙個交換,每交換一次總次數就要加一,問將這個排列轉換成乙個遞增的排列需要多少次交換?題意可以轉換成求這個排列的逆序對數。include include include include using namespace std...