UOJ 288 基礎資料結構練習題

2021-08-17 02:54:39 字數 1897 閱讀 7875

uoj

玄學,不會勢能分析

所以 維護區間最大最小值

把開根變成區間減法

如果最大值開根後的變化量和最小值的相等,就直接打個減法la

zyl az

y

# include 

# define rg register

# define il inline

# define fill(a, b) memset(a, b, sizeof(a))

# define file(a) freopen(a".in", "r", stdin), freopen(a".out", "w", stdout)

using

namespace

std;

typedef

long

long ll;

const

int _(1e5 + 5);

il int input()

int n, m;

struct segment t[_ << 2];

il void build(rg int x, rg int l, rg int r)

rg int mid = (l + r) >> 1, ls = x << 1, rs = x << 1 | 1;

build(ls, l, mid), build(rs, mid + 1, r);

t[x].mn = min(t[ls].mn, t[rs].mn);

t[x].mx = max(t[ls].mx, t[rs].mx);

t[x].sum = t[ls].sum + t[rs].sum;

}il void adjust(rg int x, rg ll v, rg int l, rg int r)

il void pushdown(rg int x, rg int l, rg int mid, rg int r)

il void modify2(rg int x, rg int l, rg int r, rg int l, rg int r, rg ll v)

rg int mid = (l + r) >> 1, ls = x << 1, rs = x << 1 | 1;

pushdown(x, l, mid, r);

if(l <= mid) modify2(ls, l, mid, l, r, v);

if(r > mid) modify2(rs, mid + 1, r, l, r, v);

t[x].mn = min(t[ls].mn, t[rs].mn);

t[x].mx = max(t[ls].mx, t[rs].mx);

t[x].sum = t[ls].sum + t[rs].sum;

}il void modify1(rg int x, rg int l, rg int r, rg int l, rg int r)

rg int mid = (l + r) >> 1, ls = x << 1, rs = x << 1 | 1;

pushdown(x, l, mid, r);

if(l <= mid) modify1(ls, l, mid, l, r);

if(r > mid) modify1(rs, mid + 1, r, l, r);

t[x].mn = min(t[ls].mn, t[rs].mn);

t[x].mx = max(t[ls].mx, t[rs].mx);

t[x].sum = t[ls].sum + t[rs].sum;

}il ll query(rg int x, rg int l, rg int r, rg int l, rg int r)

int main(rg int argc, rg char *argv)

return

0;}

uoj 228 基礎資料結構練習題

第一次看到這題大概在這裡 2016多校聯合 反正當時也沒什麼想法,表示有區間加好難受。題解並不難,維護每個區間最值 和,當乙個區間開根後所有值都一樣就直接賦值,否則遞迴。存在一種特例 3 4 3 4 3 4 3 4 3,開根後1 2 1 2 1 2 1 2 1.2 3 4 3 4 3 4 3 4 3...

UOJ228 基礎資料結構練習題

作者部落格 正解 線段樹 解題報告 這道題是一道線段樹的神題,需要我們支援區間開方 區間加法和區間求和操作。關鍵是對於開方操作的處理,考慮如果乙個區間最大值等於最小值 即全都相等 那麼就可以直接開方,然後區間賦值。否則就往下遞迴處理,知道發現整個區間相等再區間操作。上述做法在這樣的資料下會被卡tle...

題解 uoj228 基礎資料結構練習題

題目大意 給定乙個序列,要求支援區間加 區間開根號 區間求和操作。線段樹,我們可以像往常一樣判斷區間內的數是否都相等,如果相等就直接區間賦值,否則暴力遞迴下去。但是開根號還有一種特殊情況 3 4 3 4 3 4 開完根號1 2 1 2 1 2 同時加上2又變回了3 4 3 4 3 4 就給乙個完全平...