Advertisement
nicuvlad76

Untitled

Mar 4th, 2023
639
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. #include <fstream>
  2. #include <iostream>
  3. #include <vector>
  4. #define N 100001
  5. using namespace std;
  6.  
  7. ifstream fin("investitie.in");
  8. ofstream fout("investitie.out");
  9.  
  10. int a[N];
  11. bool b[N];
  12. pair<int , int> c[N];
  13. vector<int> v[N];
  14. vector<long long>s[N];
  15.  
  16. long long Calcul(int poz, int nr)
  17. {
  18.     int n, ind;
  19.     long long ras=0;
  20.     ind=c[poz].first;
  21.     poz=c[poz].second;
  22.     n=v[ind].size()-1;
  23.     ras=s[ind].back()*(nr/n);
  24.     nr%=n;
  25.     if(nr>0)
  26.     {
  27.         ras+=s[ind][min(poz+nr,n)]-s[ind][poz];
  28.         nr-=min(poz+nr,n)-poz;
  29.     }
  30.     if(nr>0)ras+=s[ind][nr];
  31.     return ras;
  32. }
  33.  
  34. int main()
  35. {
  36.   int n,m,i,j,zi,zf, cl, cr,q;
  37.   long long val, ras;
  38.   fin>>n>>m;
  39.   for(i=1;i<=n;i++)fin>>a[i];
  40.   int nr=0;
  41.   for(i=1;i<=n;i++)
  42.     if(b[i]==0)
  43.   {
  44.       nr++;
  45.       v[nr].push_back(0);
  46.       for(j=i; b[j]==0; j=a[j])
  47.       {
  48.           v[nr].push_back(j);
  49.           c[j]={nr,v[nr].size()-1};
  50.           b[j]=1;
  51.       }
  52.   }
  53.   for(i=1;i<=nr;i++)
  54.   {
  55.       s[i].push_back(0);
  56.       for(j=1;j<v[i].size();++j)
  57.       {
  58.           val=s[i].back();
  59.           s[i].push_back(val+v[i][j]);
  60.       }
  61.   }
  62.   fin>>q;
  63.   for(i=1;i<=q;i++)
  64.   {
  65.       fin>>zi>>zf>>cl>>cr;
  66.       ras=0;
  67.       for(j=cl;j<=cr;j++)
  68.         ras+=Calcul(j,zf)-Calcul(j,zi-1);
  69.       fout<<ras<<"\n";
  70.   }
  71.  
  72.   return 0;
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement