Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cmath>
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <string>
- #include <set>
- #include <map>
- #include <list>
- #include <time.h>
- #include <math.h>
- #include <random>
- #include <deque>
- #include <queue>
- #include <cassert>
- #include <unordered_map>
- #include <unordered_set>
- #include <iomanip>
- #include <bitset>
- #include <sstream>
- #include <chrono>
- #include <cstring>
- using namespace std;
- typedef unsigned long long ll;
- int main()
- {
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- int n, k;
- cin >> n >> k;
- vector<pair<ll,ll>> m;
- vector<ll> a(n);
- ll ans = 0;
- for(int i = 0; i < n; ++i){
- cin >> a[i];
- }
- sort(a.begin(), a.end());
- for(int i = 0; i < n; ++i){
- if(m.size() == 0 || m.back().first != a[i]){
- m.push_back({a[i], 1});
- }
- else{
- m.back().second++;
- }
- }
- n = m.size();
- for(int i = 0; i < n; ++i){
- if(m[i].second > 2){
- ++ans;
- }
- }
- int i = 0;
- int j = 0;
- while(i < n){
- while(j + 1 < n && m[i].first * k >= m[j + 1].first){
- ++j;
- }
- if(j - i + 1 >= 3 && i + 3 <= n)
- ans += 1LL * 3 * (j - i - 1) * (j - i);
- //cout << i << " " << j << endl;
- ++i;
- }
- i = 0;
- j = 0;
- int x = 0;
- while(i < n){
- while(j + 1 < n && m[i].first * k >= m[j + 1].first){
- ++j;
- }
- while(x + 1 < n && m[x].first * k < m[i].first){
- ++x;
- }
- if(m[i].second > 1)
- ans += 1LL * 3 * (j - x);
- ++i;
- }
- cout << ans * 1LL << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement