乙個長度為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個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足 最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升...