제출 #440531

#제출 시각아이디문제언어결과실행 시간메모리
440531Abrar_Al_SamitSpiderman (COCI20_spiderman)C++17
70 / 70
1704 ms126696 KiB
#include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; #define debug(x) cerr << '[' << (#x) << "] = " << x << '\n'; template<class T> using ordered_set = tree<T, null_type , less<T> , rb_tree_tag , tree_order_statistics_node_update> ; const int maxn = 1e6 + 6; vector<int>divisor[maxn]; void sieve() { for(int i=1; i<maxn; ++i) { for(int j=i; j<maxn; j+=i) divisor[j].push_back(i); } } void PlayGround() { int n; cin >> n; int k; cin >> k; vector<int>freq(maxn), ans(maxn); vector<int>h(n); for(int i=0; i<n; ++i) { cin >> h[i]; freq[h[i]]++; } int seen = 0; for(int i=1; i<maxn; ++i) { seen += freq[i]; if(freq[i]==0) continue; if(i==k) { ans[i] += n - seen; } else if(i > k) { int x = i - k; for(auto d : divisor[x]) if(i % d == k) ans[i] += freq[d]; if(x==i) --ans[i]; } } for(int i=0; i<n; ++i) { cout << ans[h[i]] << ' '; } cout << '\n'; #ifndef ONLINE_JUDGE cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n"; #endif } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // #ifndef ONLINE_JUDGE // freopen("input.txt", "r", stdin); // #endif sieve(); PlayGround(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...