Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.39 KB | None | 0 0
  1. https://cs.stackexchange.com/questions/3078/algorithm-that-finds-the-number-of-simple-paths-from-s-to-t-in-g
  2.  
  3.  
  4. /* WWI 2017 konkurs kwalifikacyjny zadanie zapałki grupa 3 Anita Śledź */
  5. #include<iostream>
  6. using namespace std;
  7.  
  8. const int N = 1000 * 1000 + 7;
  9. const int N2 = (1 << 20) + 10;
  10.  
  11. int n, m, baza;
  12.  
  13. int najw[N2];
  14. long long int sum[N2];
  15.  
  16. int baz(int a){ //funkcja licząca mi bazę dla danego a
  17. int wyn = 1;
  18. while (wyn <= a){
  19. wyn = wyn * 2;
  20. }
  21. return wyn;
  22. }
  23.  
  24.  
  25. void wstaw(int co, int gdzie){
  26. gdzie = gdzie + baza;
  27. sum[gdzie] = co;
  28. najw[gdzie] = co;
  29. gdzie = gdzie/2;
  30. while( gdzie >= 1){
  31. sum[gdzie] = sum[2 * gdzie] + sum[2 * gdzie + 1];
  32. najw[gdzie] = max( najw[gdzie * 2], najw[gdzie * 2 + 1] );
  33. gdzie = gdzie/2;
  34. }
  35. }
  36.  
  37. long long int sumy(int pzap, int kzap, int v, int pjest, int kjest){
  38. if(kjest < pzap || kzap < pjest){
  39. return 0;
  40. }
  41. if(kjest <= kzap && pzap <= pjest){
  42. return sum[v];
  43. }
  44. int mid = (pjest + kjest) / 2;
  45. return(sumy(pzap, kzap, v*2, pjest, mid) + sumy(pzap, kzap, v*2+1, mid+1, kjest));
  46. }
  47.  
  48.  
  49. long long int maksy(int pzap, int kzap, int v, int pjest, int kjest){ // początek zapytania, koniec zapytania, aktualny wierzchołek, początek rozpatrywanego przedziału, koniec rozpatrywanego przedziału
  50. if(kjest < pzap || kzap < pjest){
  51. return 0;
  52. }
  53. if(kjest <= kzap && pzap <= pjest){
  54. return najw[v];
  55. }
  56. int mid = (pjest + kjest) / 2;
  57. return max(maksy(pzap, kzap, v*2, pjest, mid), maksy(pzap, kzap, v*2+1, mid+1, kjest));
  58. }
  59.  
  60.  
  61. int main(){
  62. ios_base::sync_with_stdio(false);
  63.  
  64. cin >> n >> m;
  65. baza = baz(n);
  66. for(int i = 0; i < n; i++){
  67. int pom;
  68. cin >> pom;
  69. wstaw(pom, i);
  70. }
  71. // for(int i = 0; i < 2*baza; i++){
  72. // cout << najw[i] << " ";
  73. // }
  74.  
  75. // cout << "\n";
  76. for(int i = 0; i < m; i++){
  77. int a, b;
  78. cin >> a >> b;
  79. a--;
  80. b--;
  81.  
  82. long long int wszystkie = sumy(a, b, 1, 0, baza-1);
  83. int najwieksza = maksy(a, b, 1, 0, baza-1);
  84.  
  85. if((b-a > 1) && (2 * najwieksza < wszystkie)){
  86. cout << "TAK\n";
  87. }
  88. else{
  89. cout<< "NIE\n";
  90. }
  91. // cout << maksy(a, b, 1, 0, baza-1) << " " << sumy(a, b, 1, 0, baza-1) << "\n";
  92.  
  93. }
  94.  
  95.  
  96. return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement