學長 s 考試 T2 權值線段樹 線段樹合併

2022-05-08 01:06:06 字數 2419 閱讀 3159

1 #include 2 #include 3 #include 4

using

namespace

std;

5const

int n = 120000;6

#define max(a, b) ((a) > (b) ? (a) : (b))

7#define ll long long

8 ll head[n], nex[n << 1], to[n << 1], val[n << 1];9

ll cnt;

10ll ans1[n], ans2[n];

11ll a[n], k[n], rt[n];

12ll n;

13void

addedge(ll a, ll b, ll v)

1420

struct

node

21tree[n * 40

];31

void

push_up(ll x, ll del)

3236

void

push_down(ll x, ll l, ll r)

3746}47

ll merge(ll l, ll r, ll u, ll v)

4865 ll mid = (l + r) >> 1

;66 tree[now].ls =merge(l, mid, tree[u].ls, tree[v].ls);

67 tree[now].rs = merge(mid + 1

, r, tree[u].rs, tree[v].rs); //!!!!!

68 tree[now].siz = tree[tree[now].ls].siz +tree[tree[now].rs].siz;

69 tree[now].maxx =max(tree[tree[now].ls].maxx, tree[tree[now].rs].maxx);

70return

now;71}

72ll solve(ll l, ll r, ll x)

7378 ll mid = (l + r) >> 1;79

push_down(x, l, r);

80if(l <= mid && tree[ls(x)].siz && tree[ls(x)].maxx ==tree[x].maxx) // !!!!

81return

solve(l, mid, ls(x));

82else

83return solve(mid + 1

, r, rs(x));84}

85void update(ll &x, ll l, ll r, ll v)

8695

push_down(x, l, r);

96 ll mid = (l + r) >> 1;97

if(v <=mid)

98update(ls(x), l, mid, v);

99else

100 update(rs(x), mid + 1

, r, v);

101 tree[x].maxx =max(tree[ls(x)].maxx, tree[rs(x)].maxx);

102 tree[x].siz = tree[ls(x)].siz +tree[rs(x)].siz;

103}

104ll dfs2(ll l, ll r, ll x, ll idx)

105117

}seg;

118void

dfs(ll x, ll fa, ll v)

119132

intmain()

133142

for(ll i = 1 ; i <= n ; i ++)

143 scanf("

%lld

", &a[i]);

144for(ll i = 1 ; i <= n ; i ++)

145 scanf("

%lld

", &k[i]);

146 dfs(1, 0, 0

);147

for(ll i = 1 ; i <= n ; i ++)

148 printf("

%lld %lld\n

", ans1[i], ans2[i]);

149return0;

150 }

主要在於總結錯誤, 帶!的地方均為開始時有問題的(現已更正)。 

另外聽說線段樹合併已經下放到noip知識點中了。 需要多練,還可以順便提高碼力。

(現在的暴力能力太差了,需要留1.5h+來寫暴力.....)

1021上午考試T2

題目大意 n個莊家。你可以到莊家那邊下注,每次可以猜大猜小,猜一次一元錢。每一次開彩前,你都可以到任意個莊家那裡下賭注。如果開彩結果是大,你就可以得到你之前猜大的莊家相應的ai元錢。如果開彩結果是小,你就可以得到你之前猜小的莊家相應的bi元錢。你可以在同乙個莊家那裡既猜大又猜小 這樣是兩塊錢 也可以...

0928考試T2 亂搞

題目大意 給定k個數字序列,請將它們合併為乙個,滿足本來在同一序列中的兩個數的相對位置不變。定義乙個序列a的不和諧度為序列中使得a i a i 1 成立的i的總數,請輸出一種合併方案,使得合併後的序列不和諧度最小。考場上算錯時間複雜度了,以為可以切了的,沒想到拿了80。我想的是貪心 假設已經填入 i...

考試總結T2(接上次整的T1)

首先說一句,樹的每個元素的名稱的問題,那個叫jie點的東西 具體是節點還是結點.baidu百科寫的是結點.本文章將不考慮到底這倆字怎麼寫.所以兩種都可能出現 t2描述 扶蘇翻遍了歌單卻沒有找到一首歌能做這個題的題目背景,於是放上了扶蘇最喜歡的一首 不老夢 與day1的第二題一樣,今天的第二題依然是一...