Advertisement
Patrickmeme

Primprim - 91 p

Mar 19th, 2023
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3.  
  4. ifstream cin("primprim.in");
  5. ofstream cout("primprim.out");
  6.  
  7. #define MAX_ELEM 1000000
  8. int v[MAX_ELEM+1],dif[MAX_ELEM+1];
  9. int vd[1000000];
  10. int frv[100];
  11.  
  12. void calcul_dif(){
  13.     int i,j;
  14.     v[0]=v[1]=1;
  15.     for(i=2;i*i<=MAX_ELEM;i++){
  16.         if(v[i]==0){
  17.             for(j=i*i;j<=MAX_ELEM;j+=i){
  18.                 v[j]=1;
  19.             }
  20.         }
  21.     }
  22.     dif[0]=2;
  23.     dif[1]=1;
  24.     j=2;
  25.     for(i=2;i<=MAX_ELEM;i++){
  26.         if(v[i]==0)
  27.             j=i;
  28.         dif[i]=i-j;
  29.     }
  30.     j=3*MAX_ELEM;
  31.     for(i=MAX_ELEM;i>=0;i--){
  32.         if(v[i]==0)
  33.             j=i;
  34.         dif[i]=min((int)dif[i],j-i);
  35.     }
  36. }
  37.  
  38. int main()
  39. {
  40.     int n,cer,s,a,i,poz,k,n1,m;
  41.     cin>>cer>>n;
  42.     calcul_dif();
  43.     if(cer==1){
  44.         s=0;
  45.         for(i=0;i<n;i++){
  46.             cin>>a;
  47.             s+=dif[a];
  48.         }
  49.         cout<<s;
  50.     }else{
  51.         for(i=0;i<n;i++){
  52.             cin>>vd[i];
  53.             frv[dif[vd[i]]]++;
  54.         }
  55.         cin>>n1;
  56.         for(m=0;m<n1;m++){
  57.             cin>>poz>>a>>k;
  58.             frv[dif[vd[poz-1]]]--;
  59.             vd[poz-1]=a;
  60.             frv[dif[vd[poz-1]]]++;
  61.             s=i=0;
  62.             while(k>0){
  63.                 if(frv[i]<k){
  64.                     k-=frv[i];
  65.                     s+=frv[i]*i;
  66.                 }else{
  67.                     s+=k*i;
  68.                     k=0;
  69.                 }
  70.                 i++;
  71.             }
  72.             cout<<s<<"\n";
  73.         }
  74.     }
  75.     return 0;
  76. }
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement