Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int MAXN = 1e6;
- int a[MAXN];
- pair <int, int> b[MAXN];
- bool was[MAXN];
- void solve() {
- int n, p;
- cin >> n >> p;
- for (int i = 1; i <= n; i++){
- cin >> a[i];
- b[i].first = a[i];
- b[i].second = i;
- }
- sort(b + 1, b + 1 + n);
- for (int i = 1; i <= n; i++){
- // dsu[i] = i;
- was[i] = 0;
- }
- long long ans = 0;
- int cnt = 0;
- for (int i = 1; i <= n; i++){
- int val = b[i].first;
- int pos = b[i].second;
- if (val >= p){
- break;
- }
- if (was[pos] == 1){
- continue;
- }
- was[pos] = 1;
- cnt++;
- for (int j = pos + 1; j <= n; j++){
- if (a[j] % val == 0 && was[j] == false){
- was[j] = 1;
- ans += val;
- }
- else if (a[j] % val == 0){
- ans += val;
- cnt--;
- break;
- }
- else{
- break;
- }
- }
- for (int j = pos - 1; j >= 1; j--){
- if (a[j] % val == 0 && was[j] == false){
- was[j] = 1;
- ans += val;
- }else if (a[j] % val == 0){
- ans += val;
- cnt--;
- break;
- }
- else{
- break;
- }
- }
- }
- for (int i = 1; i <= n; i++){
- if (!was[i])
- cnt++;
- }
- cout << ans + p * (cnt - 1LL) << '\n';
- }
- int main() {
- int t;
- cin >> t;
- while (t--) {
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment