正解算法为什么过不了

P4054 [JSOI2009] 计数问题

问什么题目叫做正解算法 ```cpp void Update (int x,int y,int v,int k) { for (register int i=x;i<=n;i+=Lowbit (i)) for (register int j=y;j<=m;j+=lowbit (j)) //lowbit是那个位运算函数,忘了咋写了。。。。 f[i][j][v]+=k; return; } int Getans (int x,int y,int v) { int ans=0; for (register int i=x;i>0;i-=Lowbit (i)) for (register int j=y;j>0;j-=Lowbit (j)) ans+=f[i][j][v]; return ans; } ``` 区间试试???
by PassName @ 2022-01-25 17:59:14


@[kkk的忠实粉丝](/user/482730) 要用二维的树状数组,你这样单次问询最差是 $\mathcal O(\max(n,m)\log \max(n,m))$ 的,常数大的话可能过不了。
by Petit_Souris @ 2022-01-25 22:04:36


@[单南松](/user/524911) LSB(i)=i&(-i)
by aSunnyDay @ 2022-01-26 10:51:42


@[Petit_Souris](/user/288866) 所以说一般来说是二维数状数组比一维块是么。 OI可真是一门玄学的学科
by aSunnyDay @ 2022-01-26 10:52:46


@[kkk的忠实粉丝](/user/482730) 二维的是 $\log^2$,肯定比 $n\log $ 要快啊
by Petit_Souris @ 2022-01-26 11:29:29


@[kkk的忠实粉丝](/user/482730) 你这样写相当于 每种颜色开 $n$ 个树状数组。
by Petit_Souris @ 2022-01-26 12:00:14


@[Petit_Souris](/user/288866) 有道理啊 谢谢大佬
by aSunnyDay @ 2022-01-26 12:05:08


|