HDOJ4267解題報告 線段樹add的轉化

2022-03-01 11:16:42 字數 1647 閱讀 3657

題目概述:

略。大致思路:

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 11

using

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...