題意:中文題,他給的半徑實際上就是兩點之間的距離,然後要求找出兩個點的權值加上之間的距離最大。
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...