Advertisement
IzhanVarsky

Untitled

May 9th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. int logs[100001];
  8.  
  9. void fillLogs(int n) {
  10. logs[1] = 0;
  11. int start = 1;
  12. int toPush = 0;
  13. while (true) {
  14. int i = start;
  15. for (; i < start * 2 && i < n; i++) {
  16. logs[i] = toPush;
  17. }
  18. if (i >= n) break;
  19. start <<= 1;
  20. toPush++;
  21. }
  22. }
  23.  
  24.  
  25. int main() {
  26. ios_base::sync_with_stdio(false);
  27. cin.tie(nullptr);
  28. cout.tie(nullptr);
  29. int n;
  30. cin >> n;
  31. fillLogs(n + 1);
  32. vector<vector<int>> dp(n + 1, vector<int>(logs[n] + 1));
  33. for (int i = 1; i <= n; ++i) {
  34. cin >> dp[i][0];
  35. }
  36. for (int j = 1; j <= logs[n]; ++j) {
  37. for (int i = 1; i <= n; ++i) {
  38. dp[i][j] = dp[dp[i][j - 1]][j - 1];
  39. }
  40. }
  41. for (int i = 1; i <= n; ++i) {
  42. cout << i << ": ";
  43. for (int j = 0; j <= logs[n]; ++j) {
  44. if (dp[i][j] == 0) break;
  45. cout << dp[i][j] << " ";
  46. }
  47. cout << '\n';
  48. }
  49. return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement