我的天 神奇的貢獻轉換

2022-08-18 23:09:14 字數 1493 閱讀 3691

今有\(n\)人,互不認識,排成一列.現有\(m\)輪操作,每輪操作給出區間\([l,r]\),使區間內互不認識的人相認識.試問每輪操作可以新產生多少對相互認識的人?

考場上只想出了\(10\)pts的暴力分,一一枚舉,複雜度\(\omicron(m\cdot n^)\).現給出\(50\)pts解法:

我們可以開乙個陣列\(f\),\(f[i]\)表示第\(i\)個人向右所能認識的最遠的人,故每次計算改為計算貢獻,然後更新\(f[i]\).又由於\(f[i]\)顯然具有單調性,於是我們可以開線段樹維護,複雜度\(\omicron(m\log n)\)

#include#include#include#include#include#include#include#include#include#define r register

#define next kdjadskfj

#define debug puts("mlg")

#define mod 1000000000

#define mod(x) ((x%mod+mod)%mod)

using namespace std;

typedef long long ll;

typedef long double ld;

typedef unsigned long long ull;

inline ll read();

inline void write(ll x);

inline void writeln(ll x);

inline void writesp(ll x);

const ll maxn=600000;

ll n,m;

ll dat1[maxn<<2],dat2[maxn<<2],sum[maxn<<2];

ll lazy[maxn<<2];

inline void build(ll p,ll l,ll r)

ll mid=l+r>>1;

build(p<<1,l,mid);build(p<<1|1,mid+1,r);

dat1[p]=min(dat1[p<<1],dat1[p<<1|1]);

dat2[p]=max(dat2[p<<1],dat2[p<<1|1]);

sum[p]=sum[p<<1]+sum[p<<1|1];

}inline void pushdown(ll p,ll l,ll r)

}ll ansr;

inline ll query(ll p,ll l,ll r,ll u,ll v)

int main() }}

inline ll read()while(ch>='0'&&ch<='9')return x*t;}

inline void write(ll x)if(x<=9)write(x/10);putchar(x%10+'0');}

inline void writesp(ll x)

inline void writeln(ll x)

天神的密碼

2018年,icebound開啟了神殿。而在2019年,icebound正在試圖破解天神的密碼,以期獲得天神的力量。icebound發現,想要得到神的密碼,必須先要完成乙個祭祀儀式。在這個祭祀儀式上,我們首先會追隨神的指引,得到兩個正整數 n和 k。隨後,我們令 x n k,得到天神喜歡的數字x。利...

譯 js中的神奇的型別轉換

true false 1 12 6 2 number 15 3 number153 15 3 number 18number 1 null true foo bar foonan true true false false false false null false false true true...

hrbust oj 1937 神奇的進製轉換

神奇的進製轉換 description xuxu的資料結構要考試了,所以他在很努力的看書,有一天他看呀看呀看,突然看到乙個進製轉換的題目,說是要將乙個十進位制數轉換成二進位制數,他算呀算呀算,然後就把這個問題解決了。可是他很愛思考,他想怎麼樣能夠將這個十進位制數轉換成k進製的數呢?求幫助,help!...