牛客 40F 珂朵莉的約數 莫隊

2022-05-28 05:27:12 字數 1103 閱讀 3634

珂朵莉給你乙個長為n的序列,有m次查詢 

每次查詢給兩個數l,r

設s為區間[l,r]內所有數的乘積 

求s的約數個數mod 1000000007

直接莫隊暴力維護複雜度是$o(8m\sqrt)$.

看了官方題解, 序列權值比較小, 權值<1000的素數暴力維護, >1000的素數最多只有1個, 用莫隊維護, 這樣能優化掉8的常數.

#include #include #include #include #include #include #include #include #include #include #include #define rep(i,a,n) for(int i=a;i<=n;++i)

#define per(i,a,n) for(int i=n;i>=a;--i)

#define hr putchar(10)

#define pb push_back

#define lc (o<<1)

#define rc (lc|1)

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

#define ls lc,l,mid

#define rs rc,mid+1,r

#define x first

#define y second

#define io std::ios::sync_with_stdio(false)

#define endl '\n'

#define db(a) (

ll qpow(ll a,ll n)

inline int rd()

//head

const int n = 1e6+10;

int n, m, sqn;

int gpf[n], ans[n], blo[n];

int inv[n];

vectora[n];

struct _

} e[n];

int cnt[n], now=1;

void upd(int x, int v)

}int main()

rep(i,1,m) printf("%d\n",ans[i]);

}

牛客練習賽40

題目鏈結 c題 小a與尤拉路 先考慮迴路的情況。由於是一棵樹,任兩點間路徑只有一條,從一條邊走到深度更大的點,一定還會從同一條邊返回以回到起點或者遍歷其他子樹,所以每條邊需要複製一次,此時答案是邊權和的兩倍。不是迴路的情況可以減掉從終點回到起點的路徑,要讓這條路徑盡量長,所以長度一定是直徑的長度。答...

牛客 F日期小能手

題目鏈結 這道題,思路就是找到6.1,和5.1是週幾,然後再把日期加上去,想法是直接暴算,但是因為我又菜又懶,就放棄了這個題,後來補題的時候,看到大佬的 有公式可以計算某一天日期是週幾,並且,可以先進行預處理這樣更方便了,偷學了一手,確實,有奇效。這裡留一下大佬的 以便日後參考和學習 include...

牛客練習賽6 珂學送分2

珂.珂.珂朵莉給你出了一道送分題 給你乙個長為n的序列,和乙個數a,你可以從裡面選出最多m個數 乙個合法的選擇的分數定義為選中的這些數的和加上額外規則的加分 有b個額外的規則,第i個規則即為 對於這個序列的所有長為a的連續子區間,如果這個子區間中對應的給出的xi個位置都被選中了,則這次選擇的分數加上...