無聊題目大紀實(HDU 4288 Coder)

2022-05-05 21:39:10 字數 2213 閱讀 8278

這神題,暴力陣列可過,vector可過,線段樹可過。。。時限拉的太長了,所以就成水題了。。。不過比賽的時候真的沒敢用陣列暴力寫。。。

說說線段樹的思路吧。

對樹的每個節點 l, r, cnt, sum[5],分別表示左區間,右區間,這段區間上的點數,這段區間上sum[x%5]的和。

先把所有的資料都讀入,然後離散化,去掉重複的資料建樹。

再處理一邊就可以了。

ps:葉節點只有sum[0]需要更新,sum[1...4]更新不到。。這個注意理解。。

view code

#include #include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define cl(arr, val) memset(arr, val, sizeof(arr))

#define rep(i, n) for((i) = 0; (i) < (n); ++(i))

#define for(i, l, h) for((i) = (l); (i) <= (h); ++(i))

#define ford(i, h, l) for((i) = (h); (i) >= (l); --(i))

#define l(x) (x) << 1

#define r(x) (x) << 1 | 1

#define mid(l, r) (l + r) >> 1

#define min(x, y) x < y ? x : y

#define max(x, y) x < y ? y : x

#define e(x) (1 << (x))

#define iabs(x) (x) < 0 ? -(x) : (x)

#define out(x) printf("%i64d\n", x)

#define lowbit(x) (x)&(-x)

#define read() freopen("data.in", "r", stdin)

#define write() freopen("data.out", "w", stdout);

const

double eps = 1e-8

;typedef

long

long

ll;const

int inf = ~0u>>2

;using

namespace

std;

const

int n = 100010

;struct

node tree[n

<<2

];char op[n][5

];int

num[n];

intt[n];

inttt[n];

intcnt, ts, p;

void build(int t, int l, int

r) void push_up(int

t) }

void updata(int t, int pos, int val, bool

flag)

int mid =mid(tree[t].l, tree[t].r);

if(pos <=mid) updata(l(t), pos, val, flag);

else

updata(r(t), pos, val, flag);

push_up(t);

}int find(int

x)

return -1;}

intmain()

}sort(t, t +cnt);

ts = 0

; tt[ts++] = t[0

];

for(i = 1; i < cnt; ++i)

build(

1, 0, ts - 1

);

for(i = 0; i < n; ++i)

else

if(op[i][0] == 'a'

) else}}

return0;

}

無聊題目大紀實(HDU 4288 Coder)

這神題,暴力陣列可過,vector可過,線段樹可過。時限拉的太長了,所以就成水題了。不過比賽的時候真的沒敢用陣列暴力寫。說說線段樹的思路吧。對樹的每個節點 l,r,cnt,sum 5 分別表示左區間,右區間,這段區間上的點數,這段區間上sum x 5 的和。先把所有的資料都讀入,然後離散化,去掉重複...

無聊的題目,權當一樂

話說有這麼一段 要求你在橫線上填出相應的 來列印出集合的全部元素,不允許用var關鍵字。敝人上週真實經歷的筆試題 1dictionary string string dict new dictionary string string 2 3foreach item indict 4 6 正確答案是 ...

HDU 5242 思路題目

本題目給定一顆以1為根的樹,每個節點都有乙個權,記,從根走到葉子節點的一條線為一條路,問從根走到葉子k次,最多可以得到得到的權和。被走過的點的權不再被疊加。1 n,k 100000 思路 首先這題目,不適合樹形揹包,資料範圍太大,樹形揹包大概是被背數量上限的平方的複雜度即k 2。可以用貪心的思想來做...