JSOI2014 序列維護

2022-05-02 02:18:09 字數 1240 閱讀 9708

傳送門

其實這題就是luogu的模板線段樹2,之所以要發題解就是因為學到了一種比較nb的 \(\text\) 的方式。(參見這題)

我們可以把修改操作統一化,視為 \(ax + b\) 的形式,然後我們按照原來的套路來維護兩個標記,分別代表 \(a\) 和 \(b\) ,那麼我們的更新就可以這麼寫:

inline void f(int p, int atag, int mtag, int l, int r)
然後我們就只需要寫乙個維護 \(ax + b\) 操作的修改就可以了。

其實我們還可以發現這個東西還可以用於區間賦值 \((a = 0)\)。

簡直很妙有沒有

#include #define rg register

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

typedef long long ll;

template < class t > inline void read(t& s)

const int _ = 100005;

int n, m; ll p, a[_];

struct node t[_ << 2];

inline int lc(int p)

inline int rc(int p)

inline void pushup(int p)

inline void f(int p, int atag, int mtag, int l, int r)

inline void pushdown(int p, int l, int r, int mid) }

inline void build(int p = 1, int l = 1, int r = n)

int mid = (l + r) >> 1;

build(lc(p), l, mid), build(rc(p), mid + 1, r), pushup(p);}

inline void update(int ql, int qr, ll atag, ll mtag, int p = 1, int l = 1, int r = n)

inline ll query(int ql, int qr, int p = 1, int l = 1, int r = n)

int main()

return 0;

}

bzoj5039 Jsoi2014 序列維護

做做bzoj上的新題 不存在的 同bzoj1798 ahoi2009 維護序列,樣例都一樣的.我能想象到的唯一的新的考察意義就是模數是2e9不是1e9,於是加法的時候需要轉long long 就是給出一段序列,zici區間加乙個數,區間乘乙個數,區間求和.線段樹開兩個標記a,b表示乘上a再加b,nl...

JSOI2014 學生選課

傳送門 看到這題首先可以二分。考慮對於當前的 mid 如何 text 我們用 f 來表示 i 對 j 的好感度排名,那麼對於兩個人 i j 如果有 max f mid 那麼顯然這兩個人是不能上同乙個老師的課的。而且每個人可以上的課只有兩種,我們記為 a 假設 i j 對於當前的 mid 而言不能分在...

JSOI2014 歌劇表演

傳送門 沒想到吧我半夜切的 這道題應該算是 text 裡面比較簡單的吧。考慮用集合關係來表示分辨關係,具體地說就是我們把所有演員分成若干個集合,滿足同乙個集合內的演員兩兩不能分辨。初始時所有演員位於同乙個集合內。然後對於某次參加了演出的演員,他們可能分別來自不同的集合,那麼這些集合就會有兩類不同的組...