线段树分治主要思想通过线段树的结构,对时间进行分治,从而在O(nlog2n)O(nlog_2n)O(nlog2n)的时间中维护出每一次询问的状态。是一种离线算法,如果不带修改,一般也可以用CDQ分治替换。算法结构代码模板#include<bits/stdc++.h>using namespace std;struct node{ int x , y , st , ed;};const int N = 100005 , M = 200005 , T = 100005 ;
摘要由CSDN通过智能技术生成
线段树分治
主要思想
通过线段树 (一般不动态开点)的结构,对时间进行分治,从而在 O ( n l o g 2 n ) O(nlog_2n) O(nlog2n)的时间中维护出每一次询问的状态。是一种离线算法,如果不带修改,一般也可以用CDQ分治替换。
算法结构
图解数据结构
代码模板
#include<bits/stdc++.h>usingnamespace std;structnode{
int x , y , st , ed;};constint N =100005, M =200005, T =100005;int n , m , t;
node e[M];
vector<int> ve[M *4+5];voidmodi(int l,int r,int k,int x,int y,int now){
if(l <= x && y <= r){
ve[now].push_back(k);return;}int mid =(x + y)>>1, ls = now <<1, rs = now <<1|1;if(mid >= l)modi(l,r,k,x,mid,ls);if(r > mid)modi(l,r,k,mid+1,y,rs);}voiddfs(int x,int y,int now,int OK){
int ncnt =0;if(
线段树分治主要思想通过线段树的结构,对时间进行分治,从而在O(nlog2n)O(nlog_2n)O(nlog2n)的时间中维护出每一次询问的状态。是一种离线算法,如果不带修改,一般也可以用CDQ分治替换。算法结构代码模板#include<bits/stdc++.h>using namespace std;struct node{ int x , y , st , ed;};const int N = 100005 , M = 200005 , T = 100005 ;