
分块
文章平均质量分 67
m0_51303687
取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,则无所得矣。
展开
-
做题记录 2021.9.23 洛谷P2574XOR的艺术
inline bool check(int i,int m) {return (b.vis[m])?a[i]=='0':a[i]=='1';} //应该加一inline void change(int i,int m) { if(a[i]=='0') { a[i]='1'; b.num0[m]--; b.num1[m]++; } else { a[i]='0'; b.num1[m]--; b.num0[m]++; }}inline void原创 2021-09-24 09:17:14 · 120 阅读 · 0 评论 -
学习记录 分块思想
有时对于一些区间操作,比如求区间的最大(小)值、和、乘积等,如果朴素地求解,每次操作需要O(n)O(n)O(n)的时间(n为区间长度)。如果需要多次求解,那么时间复杂度会很不理想。这时就需要一些特殊方法。其中一种比较好理解的方法就是分块。就是把数据分成若干块,对于区间[l,r]上的操作,对其在完整的块内的部分直接求解,不完整的块单独求解。一般地,我们把每块长度设为b=[n][\sqrt n][n] ,这样就有n/b块。在最坏情况下(l为所在区间的第二个,r为所在区间的倒数第二个。比如100个元素,1原创 2021-09-19 15:01:11 · 93 阅读 · 0 评论