51nod1624 取餘最長路 字首和 set

2022-04-30 06:48:07 字數 1157 閱讀 2945

由於只有3行,因此只會會換行2次,假設$x, y$分別為這兩次的換行點

那麼答案為$s[1][x] +s[2][y] - s[2][x - 1] + s[3][n] - s[3][y - 1]$

其中,$s[i]$表示第$i$行的字首和

令$a[x] = s[1][x] - s[2][x - 1], b[y] = s[2][y] - s[3][y - 1]$

考慮列舉$x$,那麼問題轉化為詢問在一堆數中求乙個數$k$使得$v (= a[x] + s[3][n]) + k \;mod\;p$最大

分兩種情況考慮,第一種$v + k \in [v, mod - 1]$,那麼$k \in [0, mod - k - 1]$,並且$k$越大越好

第二種不如第一種好,但有可能不得不選,$v + k \in [1, v - 1]$,同樣時$k$越大越好

也就是說,需要一種支援插入,查詢前驅和最大值的資料結構,$set$就可以

注:倒敘列舉$x$,可以做到不刪除

複雜度$o(n \log n)$

#include #include 

#include

#include

#include

using

namespace

std;

extern inline char

gc()

inline

intread()

while(c >= '

0' && c <= '

9') p = p * 10 + c - '

0', c =gc();

return p *w;

}#define ll long long

#define ri register int

#define sid 200050

intn, ans, mod;

int s[4

][sid], a[sid], b[sid];

setex;

intmain()

printf(

"%d\n

", ans);

return0;

}

51nod 1624 取餘最長路

佳佳有乙個n m的帶權矩陣,她想從 1,1 出發走到 n,m 且只能往右往下移動,她能得到的娛樂值為所經過的位置的權的總和。有一天,她被下了惡毒的詛咒,這個詛咒的作用是將她的娛樂值變為對p取模後的值,這讓佳佳十分的不開心,因為她無法找到一條能使她得到最大娛樂值的路徑了!她發現這個問題實在是太困難了,...

51nod 1624 取餘最長路

原題鏈結 1624 取餘最長路 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 佳佳有乙個n m的帶權矩陣,她想從 1,1 出發走到 n,m 且只能往右往下移動,她能得到的娛樂值為所經過的位置的權的總和。有一天,她被下了惡毒的詛咒,這個詛咒的作用是將她的娛樂值變為...

51 Nod1624 取餘最長路

1624 取餘最長路 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 佳佳有乙個n m的帶權矩陣,她想從 1,1 出發走到 n,m 且只能往右往下移動,她能得到的娛樂值為所經過的位置的權的總和。有一天,她被下了惡毒的詛咒,這個詛咒的作用是將她的娛樂值變為對p取模後...