日常訓練 跑步(BIT)

2021-09-24 02:28:04 字數 1185 閱讀 7061

不難證明,每一行被修改的恰好是連續的一段,並且這段的 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

2log⁡n

)\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 正題 很裸的廣搜啊。對於乙個點,向四個方向搜,直到遇到不能走的位置在停下。例如 就往四個方向列舉,直到四個方向都走到底為止。那麼上圖能走的 能轉移的 被標記成紅色就是 這也就是和普通廣搜的區別吧。其...