線段樹的應用與優化(注意此題更改資料後已tle)

2021-07-16 13:44:56 字數 1271 閱讀 5942

題意:三種操作,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 單點修改就是每到乙個節點,看這個節點代表著的區間包括不...