Advertisement
999ms

Untitled

Mar 21st, 2021
770
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. void solve() {
  2.   int n;
  3.   read(n);
  4.   vector<int> a(n);
  5.   read(a);
  6.   if (n == 1) {
  7.     if (a[0] == 1) {
  8.       cout << "1 1\n";
  9.     } else {
  10.       cout << "0\n";
  11.     }
  12.     return;
  13.   }
  14.  
  15.   set<int> indexes;
  16.   for (int i = 0; i < n; i++) {
  17.     indexes.insert(i);
  18.   }
  19.   set<pair<int,int>> arr;
  20.   for (int i = 0; i < n; i++) {
  21.     arr.insert({i, a[i]});
  22.   }
  23.   int pre = -1;
  24.   int cur = 0;
  25.   vector<int> ans;
  26.   int itr = 0;
  27.   int pre_itr = -2;
  28.   while (indexes.size()) {
  29.     itr++;
  30.    
  31.     auto it = indexes.lower_bound(cur);
  32.     if (it == indexes.end()) {
  33.       it = indexes.lower_bound(0);
  34.     }
  35.     cur = *it;
  36.    
  37.     int nxt = cur;
  38.     auto it2 = arr.lower_bound({cur + 1, 0});
  39.     if (it2 != arr.end()) {
  40.       nxt = it2->first;
  41.     } else {
  42.       nxt = arr.begin()->first;
  43.     }
  44.  
  45.     if (__gcd(a[nxt], a[cur]) == 1 && (pre_itr + 1 != itr || pre != cur)) {
  46.       indexes.erase(nxt);
  47.       arr.erase({nxt, a[nxt]});
  48.       ans.push_back(nxt);
  49.       pre = cur;
  50.       cur += 2;
  51.     } else {
  52.       pre_itr = itr;
  53.       pre = cur;
  54.       indexes.erase(cur);
  55.       cur++;
  56.     }
  57.   }
  58.  
  59.   cout << ans.size() << ' ';
  60.   for (int val : ans) {
  61.     cout << val + 1 << ' ';
  62.   }
  63.   cout << '\n';
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement