Josif_tepe

Untitled

Feb 27th, 2026
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <stack>
  5. #include <cstring>
  6. #include <fstream>
  7. #include <cmath>
  8. using namespace std;
  9. typedef long long ll;
  10. const int maxn = 1e6 + 10;
  11. bool is_prime[maxn];
  12.  
  13. vector<int> idx[1000004];
  14. int x[maxn];
  15. vector<int> prime;
  16. int main() {
  17. //    ifstream cin("in.txt");
  18.     ios_base::sync_with_stdio(false);
  19.     memset(is_prime, true, sizeof is_prime);
  20.     is_prime[0] = false;
  21.     is_prime[1] = false;
  22.  
  23.     int cnt = 0;
  24.    
  25.     int ma = 0;
  26.     for(ll i = 2; i <= maxn; i++) {
  27.         if(is_prime[i]) {
  28.             prime.push_back(i);
  29.             for(ll j = i * i; j <= maxn; j += i) {
  30.                 is_prime[j] = false;
  31.             }
  32.         }
  33.     }
  34.     int n,m;
  35.     cin>>n>>m;
  36.    
  37.     for(int i=0;i<n;i++){
  38.         cin>>x[i];
  39.        
  40.         int sq = sqrt(x[i]);
  41.         for(int j = 1; j <= sq; j++) {
  42.             if(x[i] % j == 0) {
  43.                 if(is_prime[j]) {
  44.                     idx[j].push_back(i);
  45.                 }
  46.                
  47.                 if(j != x[i] / j and is_prime[x[i] / j]) {
  48.                     idx[x[i] / j].push_back(i);
  49.                 }
  50.             }
  51.         }
  52.    
  53.     }
  54.    
  55.     int sz = (int) prime.size();
  56.     for(int i=0;i<m;i++){
  57.         int l,r,u;
  58.         cin>>l>>r>>u;
  59.         l--; r--;
  60.        
  61.         int j = (int) (lower_bound(prime.begin(), prime.end(), u) - prime.begin());
  62.        
  63.         int res = 2e9;
  64.         if(j >= 0 and j < sz) {
  65.             int lj = j, rj = j;
  66.            
  67.             bool ok = false;
  68.             while(lj >= 0 and rj < n) {
  69.                 int p = prime[lj];
  70.                
  71.                 vector<int>::iterator it = lower_bound(idx[p].begin(), idx[p].end(), l);
  72.                 if(it != idx[p].end() and *it <= r) {
  73.                     res = min(res, abs(p - u));
  74.                     ok = true;
  75.                 }
  76.                
  77.                 p = prime[rj];
  78.                 it = lower_bound(idx[p].begin(), idx[p].end(), l);
  79.                 if(it != idx[p].end() and *it <= r) {
  80.                     res = min(res, abs(p - u));
  81.                     ok = true;
  82.                 }
  83.                
  84.                 if(ok) {
  85.                     break;
  86.                 }
  87.                 lj--;
  88.                 rj++;
  89.                
  90.             }
  91.            
  92.  
  93.             while(lj >= 0 ) {
  94.                 int p = prime[lj];
  95.                
  96.                 vector<int>::iterator it = lower_bound(idx[p].begin(), idx[p].end(), l);
  97.                 if(it != idx[p].end() and *it <= r) {
  98.                     res = min(res, abs(p - u));
  99.                     ok = true;
  100.                 }
  101.                
  102.                
  103.                 if(ok) {
  104.                     break;
  105.                 }
  106.                 lj--;
  107.                
  108.             }
  109.             while(rj < n ) {
  110.                 int p = prime[rj];
  111.                
  112.                 vector<int>::iterator it = lower_bound(idx[p].begin(), idx[p].end(), l);
  113.                 if(it != idx[p].end() and *it <= r) {
  114.                     res = min(res, abs(p - u));
  115.                     ok = true;
  116.                 }
  117.                
  118.                
  119.                 if(ok) {
  120.                     break;
  121.                 }
  122.                 rj++;
  123.                
  124.             }
  125.             cout << res << " ";
  126.         }
  127.        
  128.        
  129.     }
  130.  
  131.  
  132.     return 0;
  133. }
  134.  
Advertisement
Add Comment
Please, Sign In to add comment