題意:三種操作,1是區間加,2是區間開根號,3是區間求和。
分析:區間開根號,往往需要更新到底,但如果這個陣列退化為相同的數。做乙個區間內的數都相同的標記,即可。
#include #include #include #include #include #include #include #include #include #include #include #include #include #define l(u) (u<<1)
#define r(u) (u<<1|1)
//long long
using namespace std;
struct nodes
node[800040];
int a[200009];
void pushup(int u)
void update(int u,int left,int right,int val);
void pushdown(int n)
}void build (int u,int left,int right)
int mid = (node[u].l + node[u].r)>>1;
build (l(u),left,mid);
build (r(u),mid+1,right);
pushup(u);
}void update(int u,int left,int right,int val)
pushdown(u); //延時更新
int mid = (node[u].l + node[u].r)>>1;
if (right <= mid) update(l(u),left,right,val);
else if (left > mid) update(r(u),left,right,val);
else
pushup(u); //這裡不需要再向上更新,因為我們是從上到下更新的
}long long querysum(int u,int left,int right)
long long querymin(int u,int left,int right)
int main ()
build(1,1,n);
for(int i = 0; i < m; i ++)
if(s[0] == 'm')
if(s[0] == 's')
}return 0;
}
**:
線段樹的應用
標籤 空格分隔 c 資料結構 有時候我們求乙個給定的平面直角座標系中的n個矩形的面積,而此時,我們就需要引入一種高效且奇妙的演算法 掃瞄線。例如該圖 我們將其中的矩形按上下邊,構建4條掃瞄線,並按照y值大小進行排序,並標記為上或下。但是由於矩形的x座標有4個,並且相互關聯,而想要提公升演算法效率就必...
線段樹與樹狀陣列 H題
線段樹與樹狀陣列 h題 output for every inquiry,output the correspond answer per line.sample input 31 2 1 33 q 1c 2 q 1sample output32 題意 一棵樹有n個結點,編號1 n,1是根節點,有n...
線段樹與樹狀陣列的對比應用
因為樹狀陣列不需要構造這一過程,所以先講線段樹的構造 就是用到遞迴 先設left 1,right n,然後每一次遞迴,left mid和mid 1 right。如下 void build int left,int right,int index 單點修改就是每到乙個節點,看這個節點代表著的區間包括不...