uva11992 區間求和,最大值,最小值
題意:r行c列的全0矩陣 有三種操作 1 x1 y1 x2 y2 v子矩陣(x1,y1,x2,y2)所有元素增加v
2 x1 y1 x2 y2 v子矩陣(x1,y1,x2,y2)所有元素設為v
3 x1 y1 x2 y2 查詢子矩陣元素的和、最小值、最大值
題解:由於r<=20,r*c<=1e6,所以我們可以將矩陣展開成一維,每次詢問進行(x2-x1)次查詢操作即可。這樣就轉換成了線段樹問題。
我們做addv標記加val操作,用setv標記變val操作;若遇到setv,我們需要清空addv,反之則不需要。若在操作的時候setv和addv都存在,那麼先執行setv操作,之後執行addv操作。
對於一段區間執行setv操作或者addv操作,我們都能直接得到這段區間的元素和,最小值和最大值,不需要再向下遍歷。
pushdown():用作標記的下移。
add():用於加val操作
update():用於變val操作
query():用於查詢操作
#include #include #include #include #include #include #include #include #include #include using namespace std;
#define rson c<<1|1
#define lson c<<1
const int inf = 0x3f3f3f3f;
const int maxn=1e6+1000;
struct nodee[maxn*3];
void build(int a,int b,int c)
int mid=(a+b)/2;
build(a,mid,lson);
build(mid+1,b,rson);
}void pushdown(int c)
if(e[c].addv!=0)
}void add(int a,int b,int c,int val)
int mid=(e[c].l+e[c].r)/2;
pushdown(c);
if(b<=mid)add(a,b,lson,val);
else if(a>mid)add(a,b,rson,val);
else
e[c].maxv=max(e[lson].maxv,e[rson].maxv);
e[c].minv=min(e[lson].minv,e[rson].minv);
e[c].sum=e[lson].sum+e[rson].sum;
}void update(int a,int b,int c,int val)
pushdown(c);
int mid=(e[c].l+e[c].r)/2;
if(b<=mid) update(a,b,lson,val);
else if(a>mid) update(a,b,rson,val);
else
e[c].maxv=max(e[lson].maxv,e[rson].maxv);
e[c].minv=min(e[lson].minv,e[rson].minv);
e[c].sum=e[lson].sum+e[rson].sum;
}node query(int a,int b,int c)
}int main()
{ #ifndef online_judge
freopen("in.txt","r",stdin);
#endif // online_judge
int r,c,m;
while(scanf("%d%d%d",&r,&c,&m)!=eof)
{int i,j,k,a,x1,y1,x2,y2,val;
build(1,r*c,1);
for(i=0;i這一道題還增加了乘法與pow運算
uva 11992 為矩陣更新查詢段樹
option com onlinejudge itemid 8 page show problem problem 3143 矩陣變成一行,然後計算位置。lrj給了線段樹陣列做法 可是我做的線段樹空間過大,直接爆掉,所以換方法了 主要還是測試自己的線段樹區間更新的模板 各種re wa之後ac,做的時...
uva11992區間修改線段樹
資料範圍很大,但是可以每行建乙個線段樹,化為線性的 set的優先順序高於add pushdown的時候相當於在add和sett中對乙個整個的區間進行 賦值 一樣,所以還要加上改sum,min1,max1的部分 三個詢問可以一起做。include include include include inc...
UVA 12663(線段樹 二分)
題意 現在有n座橋,給出每個橋的高度,現在會發m次的洪水,每次洪水會漲至a高度,然後退回b的高度,問有多少橋至少被淹沒了k次。題解 先吐槽一下 唉,人太蠢怎麼辦?連二分都沒有想到,其實這一題的key就是想到二分,想到二分去解決,那麼這一題就是模板題了。吐槽完畢 很明顯直接模擬會超時。考慮使用二分,查...