一.一般模板
#include<stdio.h>
#include<string.h>
struct seg{
int left;
int right;
int val;
int calmid(){
return (left+right)/2;
}
}tt[50000000];
void build(int left,int right,int idx){
tt[idx].left = left;
tt[idx].right = right;
tt[idx].val = 0;(看情况)
if(left == right) return ;
int mid = tt[idx].calmid();
build(left,mid,2*idx);
build(mid+1,right,2*idx+1);
}
//(void)或(int)来决定是否用return及return 和
int query(int left,int right,int idx){
if(tt[idx].left == t[idx].right return query(left,right,idx);
int mid = tt[idx].calmid();
if( right <= mid) return query(left,right,2*idx);
else if(left > mid) return query(left,right ,2*idx+1);
else return max(query(left,right,2*idx),query(left,right,2*idx+1);
}
int main(){
.....
return ;主要还是在main函数上改变
}