Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <cstdio>using namespace std;const int MAXN = 100005;int N, M;int segTree[MAXN*3];int lazySet[MAXN*3];int lazyAdd[MAXN*3];void build(int node, int begin, int end){lazySet[node] = -1;lazyAdd[node] = -1;if(begin == end) scanf("%d", &segTree[node]);else{int m = (begin+end)/2;build(2*node, begin, m);build(2*node+1, m+1, end);segTree[node] = segTree[2*node] + segTree[2*node+1];}}void pushDownAdd(int node, int begin, int end){int m = (begin+end)/2;if(lazySet[node]!=-1){lazySet[2*node] = lazySet[node];lazySet[2*node+1] = lazySet[node];segTree[2*node] = (m-begin+1)*lazySet[node];segTree[2*node+1] = (end-m)*lazySet[node];lazySet[node] = -1;