不難證明,每一行被修改的恰好是連續的一段,並且這段的 l,r
l,rl,
r 都是隨著行數增加而單調遞增的。
因此我們可以得到乙個演算法,每次修改用兩個指標 l,r
l,rl,
r 表示該行要修改 [l,
r]
[l,r]
[l,r
] 這個區間。
然後我們從上往下一行行掃過去,在此過程判斷 l,r
l,rl,
r 能否向右移動。
顯然對於每次操作,查詢次數是 o(n
)\mathcal o(n)
o(n)
的。然後我們要實現的就是區間加,單點詢問,用 bit
\text
bit 即可。
時間複雜度 o(n
2logn
)\mathcal o(n^2\log n)
o(n2
logn)。
#include
template
<
class
t>
inline
void
read
(t &x)
inline
bool
read_opt()
typedef
long
long s64;
const
int maxn =
2e3+5;
int n;
int a[maxn]
[maxn]
, f[maxn]
[maxn]
; s64 ans;
s64 c[maxn]
[maxn]
;inline
void
add(s64 *c,
int x,
int del)
inline s64 query
(int i,
int x)
inline
void
modify
(int i,
int l,
int r,
int del)
intmain()
printf
("%lld\n"
, ans);}
return0;
}
nssl1175 小S練跑步 bfs
n m n mn m的地圖,每個格仔有限制。是障礙的話就不可以到,如果不是就會要求在這個格仔不可以像上下左右其中乙個方位走。求最少拐彎次數。就是bfs,之前寫過類似的,詳見 include include include include define n 510 using namespace st...
搜尋 JZOJ 5793 小s練跑步
乙個n m n times m n m的矩陣,上面有些字母,每個字母代表了不能往那個方向走,如果上面是s ss,那麼走到那裡就不能動了,求從 1,1 走到 n,m 的最少拐彎次數。廣搜。乙個方向乙個方向的拓展,直到不能走為止。include include using namespace std c...
JZOJ5793 小S練跑步 BFS
題目 p.s.本蒟蒻的語文不好,對於很難簡化的題目起不到什麼簡化所用。各位dalao就看題目吧qwq 正題 很裸的廣搜啊。對於乙個點,向四個方向搜,直到遇到不能走的位置在停下。例如 就往四個方向列舉,直到四個方向都走到底為止。那麼上圖能走的 能轉移的 被標記成紅色就是 這也就是和普通廣搜的區別吧。其...