題目概述:
略。大致思路:
rmq問題。剛開始其實是懵逼的,想了好久add操作怎麼寫,後來發現k其實很小,所以其實add總共只有55種情況(每個k及它所對應的餘數)。
然後會發現用二維陣列來存所有的情況會mle,hhhhh。一頓死摳記憶體仍然是mle。然後經過大神指點發現可以用一維陣列來存所有狀況,最後記得初始化狀態陣列。
**:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11using
namespace
std;
1213
#define sacnf scanf
14#define scnaf scanf
15#define maxn 50010
16#define maxm 26
17#define inf 1061109567
18#define eps 0.001
19const
double pi=acos(-1.0
);20
#define mod 1000000007
21#define maxnum 10000
22void swap(int &a,int &b)
23int abs(int x)
24 typedef long
long
ll;25 typedef unsigned int
uint;26
27struct
node
28 tree[4*maxn];
3233
void build_tree(int l,int r,int
dir)
3441
int m=(l+r)>>1
;42 build_tree(l,m,dir*2
);43 build_tree(m+1,r,dir*2+1
);44}45
46int query(int l,int r,int dir,int
x)47
5960
void add(int l,int r,int dir,int al,int ar,int k,int
c)61
67if(al>r||arreturn;68
int m=(l+r)>>1
;69 add(l,m,dir*2
,al,ar,k,c);
70 add(m+1,r,dir*2+1
,al,ar,k,c);71}
7273
intmain()
7492
else
if(opt==2)93
97}98}
99//
clock_t ed=clock();
100//
printf("\n\ntime used : %.5lf ms.\n",(double)(ed-st)/clocks_per_sec);
101return0;
102 }
HDOJ1698解題報告 線段樹模板
題目概述 一段區間從1 n,每次操作將某一段全部改為x,操作完成後求整個區間和。大致思路 典型的乙個rmq模板題。只需要注意add操作裡pushdown的 改成 就可以了。還有注意在build tree的時候初始化整棵樹!還有注意在build tree的時候初始化整棵樹!還有注意在build tre...
HDOJ5692解題報告 dfs序 線段樹
題目概述 中文題面就不贅述了。大致思路 這個題給出的是一棵樹,我們可以使用dfs序將這棵樹處理成一條鏈,然後對這條鏈來進行資訊維護和查詢。有兩種操作,0 x是詢問從0出發 題目保證0為樹根 經過x的路徑中的最大權值,1 x y是將點x的權值修改成y,這時我們用線段樹來維護乙個d i 表示點i到0點的...
HDOJ4366解題報告 dfs序 線段樹
題目概述 給出乙個公司所有員工的上下級關係 資料保證是一棵樹 現在想解雇一些員工,而他們的位置由他們的手下裡能力值比他大而且忠誠度最高的人來替代,給出m個詢問,求輸出替代他們的人的編號。大致思路 學習了一下dfs序的用法,附學習的部落格 簡單的說dfs序就是將一棵樹變成線性結構的演算法,並且保證點i...