bzoj2388 旅行規劃

2022-03-03 22:38:01 字數 1361 閱讀 4125

凸包好題

我一開始想的是線段樹或平衡樹維護最大字首和,但是區間修改很噁心,後來想分塊,發現貌似可以做,修改的話,中間的塊打標記,兩邊的暴力重構,查詢的話就是整塊二分斜率為零的地方,邊上的暴力查詢。$o(nsqrt(n)log(n))$

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

#define n 100050

8#define inf 0x7fffffffffffffff

9#define int long long

10using

namespace

std;

11struct

point

14 point(int a,int b)

15int

operator * (point a)

16 point operator + (point a)

17 point operator - (point a)

18bool

operator

< (const point & a)const

22}p[n],k;

23 vector v[1005

];24

intbe[n],en[n],n,nn,m;

25int

s[n],r[n];

26void

init()33}

34}35void work(int

x)42}43

void update(int x,int l,int r,int

val)

50 s[x]=::r[x]=0;51

work(x);52}

53int query(int

x)63

return p[v[x][ans]].x[1]+s[x]+::r[x]*(v[x][ans]-en[x-1]-1

);64}65

signed main()

74for(int i=1;i<=be[n];i++)en[i]=min(i*nn,n);

75init();

76 scanf("

%lld

",&m);

77int

o,x,y,z,ans;

78while(m--)

88for(int i=be[y]+1;i<=be[n];i++)

89 s[i]+=(y-x+1)*z;90}

91else

103}

104return0;

105 }

view code

BZOJ2388 旅行規劃

分塊,每一塊維護字首和,觀察發現,一次區間加操作對於 l 前,r後的區間裡相對的大小關係沒有影響,對於 l r 裡,將每個位置放在平面內作為乙個點 i si 那麼相當於給區間裡加了乙個斜率。每個塊維護乙個凸包 上凸下凸應該都可以,下文以上凸為例 如果這個塊被完整覆蓋,就打個斜率的標記,否則暴力重構凸...

BZOJ2388 旅行規劃

bzoj2388 旅行規劃 又是一道氪金題。bzoj 氪金無極限。附上大美洛谷的題面 洛谷p4192 旅行規劃 oivillage是乙個風景秀美的鄉村,為了更好的利用當地的旅遊資源,吸引遊客,推動經濟發展,xkszltl決定修建了一條鐵路將當地n個最著名的經典連線起來,讓遊客可以通過火車從鐵路起點 ...

BZOJ2388 旅行規劃

bzoj2388 旅行規劃 試題描述 oivillage是乙個風景秀美的鄉村,為了更好的利用當地的旅遊資源,吸引遊客,推動經濟發展,xkszltl決定修建了一條鐵路將當地n個最著名的經典連線起來,讓遊客可以通過火車從鐵路起點 1號景點 出發,依次遊覽每個景區。為了更好的評價這條鐵路,xkszltl為...