Advertisement
a53

investitie

a53
Jun 19th, 2022
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. #include <fstream>
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. //Hurjui Alexandru-Mihai -- CN "Stefan cel Mare", 2022
  7.  
  8. ifstream fin ("investitie.in");
  9. ofstream fout ("investitie.out");
  10.  
  11. int p[100001];
  12. bool bc[100001];
  13. pair <int, int> carp[100001];
  14. vector <int> vc[100001];
  15. vector <long long> s[100001];
  16.  
  17. long long calcs (int poz, int nr)
  18. {
  19. int n, ind;
  20. long long rasp = 0;
  21.  
  22. ind = carp[poz].first;
  23. poz = carp[poz].second;
  24.  
  25. n = vc[ind].size()-1;
  26. rasp = s[ind].back() * (nr/n);
  27. nr = nr % n;
  28.  
  29. if (nr > 0)
  30. {
  31. rasp = rasp + s[ind][min(poz+nr, n)] - s[ind][poz];
  32. nr = nr - (min (poz+nr, n) - poz);
  33. }
  34. if (nr > 0)
  35. rasp = rasp + s[ind][nr];
  36.  
  37. return rasp;
  38. }
  39.  
  40. int main()
  41. {
  42. int n, m, i, j, q, zi, zf, pst, pdr;
  43. int nrc;
  44. long long valult, rasp;
  45.  
  46. fin >> n >> m;
  47. for (i = 1; i<=n; i++)
  48. fin >> p[i];
  49.  
  50. nrc = 0;
  51. for (i = 1; i<=n; i++)
  52. if (bc[i] == 0)
  53. {
  54. nrc++;
  55. vc[nrc].push_back (0);
  56. for (j = i; bc[j] == 0; j = p[j])
  57. {
  58. vc[nrc].push_back (j);
  59. carp[j] = {nrc, vc[nrc].size()-1};
  60. bc[j] = 1;
  61. }
  62. }
  63. for (i = 1; i<=nrc; i++)
  64. {
  65. s[i].push_back (0);
  66. for (j = 1; j<vc[i].size(); j++)
  67. {
  68. valult = s[i].back();
  69. s[i].push_back (valult + vc[i][j]);
  70. }
  71. }
  72.  
  73. fin >> q;
  74. for (i = 1; i<=q; i++)
  75. {
  76. fin >> zi >> zf >> pst >> pdr;
  77.  
  78. rasp = 0;
  79. for (j = pst; j<=pdr; j++)
  80. rasp = rasp + calcs (j, zf) - calcs (j, zi-1);
  81. fout << rasp << '\n';
  82. }
  83. return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement