結果
問題 |
No.3101 Range Eratosthenes Query
|
ユーザー |
![]() |
提出日時 | 2025-04-08 02:50:47 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,271 bytes |
コンパイル時間 | 3,818 ms |
コンパイル使用メモリ | 290,392 KB |
実行使用メモリ | 30,776 KB |
最終ジャッジ日時 | 2025-04-08 02:50:59 |
合計ジャッジ時間 | 12,498 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 5 TLE * 1 -- * 18 |
ソースコード
// TLE #include <bits/stdc++.h> using namespace std; using ll = long long; const int mx = 1001001; void solve(){ int q; cin >> q; vector<vector<pair<int,int>>> rs(mx); for (int i = 0; i < q; i++){ int l, r; cin >> l >> r; rs[l].emplace_back(r,i); } vector<int> ans(q); for (auto [r, i] : rs[1]){ ans[i] = 1; } vector<bool> ex(mx,true); vector<int> buf(mx); int bid = 0; for (int l = 2; l < mx; l++){ if (rs[l].empty()) continue; ranges::sort(rs[l]); int cnt = 0; int ir = l; for (auto [r, i] : rs[l]){ while (ir <= r){ if (ex[ir]){ cnt++; buf[bid++] = ir; for (int x = ir*2; x < mx; x += ir){ ex[x] = false; } } ir++; } ans[i] = cnt; } while (bid > 0){ int p = buf[--bid]; for (int x = p*2; x < mx; x += p){ ex[x] = true; } } } for (int i = 0; i < q; i++){ cout << ans[i] << '\n'; } } int main(){ int t = 1; // std::cin >> t; while (t--){ solve(); } }