牛客24479 小睿睿的數列

2021-10-23 16:05:43 字數 1458 閱讀 1437

乙個長度為n的數列a,他想問你該數列中滿足條件(區間內存在某個數是區間內所有數的公因數)的最長區間有多少個。

資料範圍:

發現把對於分割後的區間,每個數都是區間最小值的倍數。

時間複雜度:

#include#define pb push_back

#define fi first

#define se second

#define sz(x) (int)x.size()

#define cl(x) x.clear()

#define all(x) x.begin() , x.end()

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

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

#define mem0(x) memset(x , 0 , sizeof(x))

#define mem_1(x) memset(x , -1 , sizeof(x))

#define mem_inf(x) memset(x , 0x3f , sizeof(x))

#define debug(x) cerr << #x << " = " << x << '\n'

#define ddebug(x , y) cerr << #x << " = " << x << " " << #y << " = " << y << '\n'

#define ios std::ios::sync_with_stdio(false) , cin.tie(0)

using namespace std ;

typedef long long ll ;

typedef long double ld ;

typedef pairpii ;

typedef pairpll ;

const int mod = 998244353 ;

const int maxn = 2e6 + 10 ;

const int inf = 0x3f3f3f3f ;

const double eps = 1e-6 ;

mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count()) ;

int n , a[maxn] ;

int max1 = 0 , cnt = 0 ;

int main()

if(j - i + 1 > max1) max1 = j - i + 1 , cnt = 1 ;

else if(j - i + 1 == max1) cnt ++ ;

i = j ;

}cout << cnt << '\n' ;

return 0 ;

}

牛客挑戰賽42 B 小睿睿的傷害 樹上啟發式合併

題意 思路 上面是官方題解,套路加樹上啟發式合併,就是這個啟發式之前沒寫過,寫的感覺有點繁瑣。總結 當碰到關於點對的lca具有某些性質時,可以考慮對於每個點,當這個點成為lca時求把這個點當作lca的點對對其的貢獻。include include include using namespace st...

小睿雲電腦與桌面雲的區別

小睿雲電腦距離正式上線時間已經不遠了,越來越多的使用者非常關注這一款產品的情況,也提出了很多相關的問題,其中有人在知道小睿雲電腦之後,想到了以前的一種產品叫做桌面雲,於是便提問雲電腦與雲桌面有什麼區別?今天這篇文章我們就來看看雲電腦和桌面雲的區別。雲電腦如今的時代正在踏入第四次科技革命,其基礎就是 ...

牛客 牛牛的數列

鏈結 牛牛的數列 時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足 最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升...