線段樹需要維護的:最大有效子區間權值和,左端最大有效子區間權值和,右端最大有效子區間權值和,區間和,本區間有效性。
#include#include#include
#include
#include
#include
#include
#define maxn 1000005
using
namespace
std;
typedef
long
long
ll;int a[100005
];struct
node
return
res;
}}node[3
00015
];void construct(int l,int r,int
k)
int mid=(l+r)/2
; construct(l,mid,
2*k);
construct(mid+1,r,2*k+1
);
node[k]=node[2*k]+node[2*k+1
];
}struct node query(int k,int x,int
y)
int mid=(l+r)/2
;
struct
node a;
if(x>mid) a=query(2*k+1
,x,y);
else
if(y<=mid) a=query(2*k,x,y);
else a=query(2*k,x,mid)+query(2*k+1,mid+1
,y);
return
a;
}struct node modifiy(int k,int
x,ll num)
int mid=(l+r)/2
;
if(x>mid) node[k]=node[2*k]+modifiy(2*k+1
,x,num);
else
if(x<=mid) node[k]=modifiy(2*k,x,num)+node[2*k+1
];
return
node[k];
}int
main()
else
if(q==1
)
}return0;
}
小C的詢問
小c的詢問 description 小k魔導師得到了乙個序列,這個序列有n個數。他困惑了,小c詢問了它q個問題,他都回答不上來,現在他來請教你。對於每乙個詢問都由一組 l,r 組成,問題是要回答這個區間所有數的和,所有數的與,所有數的或。聰明的你一定能幫助小k回答這些問題。input 輸入第一行為乙...
小B的詢問
這裡不講莫隊的思路,各路大神已經講清楚了。我們講一下如何卡常。把正常的莫隊交上去,記錄。單個點 1784ms 把每一次詢問的右邊界 right i 從小到大改為從打到小,快了了一點。注意要把陣列開小點。1522ms 如果分為 trunc sqrt n 塊不好,然後分別試著分為 n 6 和 n 10 ...
線段樹 小整理
求區間和 ll sum maxn 2 儲存區間和 ll add maxn 2 懶惰標記 ll a maxn 用於輸入儲存資料求區間和的函式 void pushup int x 建立線段樹 void buildtree int l,int r,int rt int m l r 1 buildtree ...