敵兵布陣:單點更新,區間求和查詢
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn =
5e4+5;
struct nodet[maxn*4]
;int a[maxn]
,nsum;
void
build
(int x,
int y,
int num)
}//定義區間求和查詢函式
void
query
(int x,
int y,
int num)}}
//定義節點更新函式add
void
add(
int x,
int val,
int num)
if(x >
(t[num]
.a+t[num]
.b)/2)
add(x, val, num*2+
1);else
add(x, val, num*2)
;}intmain()
elseif(
!strcmp
(ss,
"sub"))
elseif(
!strcmp
(ss,
"query"))
}}return0;
}
i hate it:單點更新,區間最值查詢//time limit exceeded-待改正
#include
#include
#include
#include
#define mem(a,b) memset(a, b, sizeof(a))
#define max(a, b) a>b?a:b;
using
namespace std;
const
int maxn =
2e5+5;
struct nodet[maxn*2]
;int a[maxn]
;int
build
(int x,
int y,
int num)
int mid =
(x+y)
>>1;
int a =
build
(x, mid, num<<1)
;int b =
build
(mid+
1, y,
(num<<1)
|1);
return t[num]
.maxn =
max(a, b);}
intupdate
(int x,
int val,
int num)
//if(x < t[num].a || x > t[num].b) return t[num].maxn;
int mid =
(t[num]
.a + t[num]
.b)/2;
int a, b;
if(x <= mid)
a = t[num<<1]
.maxn;
b =update
(x, val, num*2+
1);return t[num]
.maxn =
max(a, b);}
intquery
(int x,
int y,
int num)
}int
main()
else
if(ch ==
'u')}}
return0;
}
a ****** problem with integers 區間更新,區間求和,懶惰標記。//陣列-模板。
#include
#include
#include
#include
const
int maxn =
1e6+10;
using
namespace std;
typedef
long
long ll;
//len記錄id區間數字數目,sum記錄id區間統計資訊,lazy記錄標記
ll sum[maxn*4]
, lazy[maxn*4]
, len[maxn*4]
;//a記錄原資料點資訊
ll a[maxn]
;int n, m;
void
pushup
(int rt)
void
build
(int l,
int r,
int rt)
int mid =
(l+r)
>>1;
build
(l, mid, rt<<1)
;build
(mid+
1, r, rt<<1|
1);pushup
(rt);}
void
pushdown
(int rt)
}//[l,r]為查詢區間,[l,r]的當前節點所示區間
ll query
(int rt,
int l ,
int r,
int l ,
int r)
void
update
(int rt,
int l ,
int r,
int l,
int r, ll val)
pushdown
(rt)
;int mid =
(l+r)
>>1;
if(l<=mid)
update
(rt<<
1, l ,mid, l, r, val);if
(r>mid)
update
(rt<<1|
1, mid+
1, r, l, r, val)
;pushup
(rt);}
intmain()
build(1
, n,1)
;while
(m--
)else}}
return0;
}
線段樹專題
最最基礎的線段樹,只更新葉子節點,然後把資訊用pushup int r 這個函式更新上來。hdu1166 敵兵布陣 線段樹 hdu 1166 敵兵布陣 單點更新區間求和 hdu1754 i hate it 線段樹 hdu 1754 i hate it 單點更新 區間求最值 hdu1394 minim...
線段樹專題
題意 給定n個數 a1,a2,a na 1,a 2,dots,a n a1 a2 an 給出q個詢問求 l,r 內所有子區間的異或和。比如,陣列1,2,3中 1,3 的異或和為 1 1 xor2 1xo r2xo r3 2 2xo r3 3 1 1xor2 1xor2xor3 2 2xor3 3 1...
ACM 線段樹 專題
其中應該有我以前 刷過的題吧 沒有辦法 演算法這東西 一不刷 就會忘。像這道題 我 就wa了 四發 才過 但是 我 以前確實過過。再重新理解一下吧 大概就是 線段樹 就是 左右 節點 然後 上面就是 我們的 和 建立的時候和每次修改 都要更新一下父節點 也就是子節點的和 樹這個東西 仔細想想 確實集...