Advertisement
Guest User

Tnia

a guest
Feb 24th, 2020
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. ifstream in("tnia.in");
  7. ofstream out("tnia.out");
  8.  
  9. int searchbin1(long long h[], long long left, int right, long long value)
  10. {
  11. if(h[left]>=value)
  12. return left-1;
  13. int mid;
  14. while(left<=right)
  15. {
  16. mid=(left+right)/2;
  17. if(value<=h[mid])
  18. right=mid-1;
  19. else
  20. left=mid+1;
  21. }
  22. return right;
  23. }
  24. int searchbin2(long long h[], long long left, long long right, long long value)
  25. {
  26. if(h[right]<value)
  27. return right;
  28. int mid;
  29. while(left<=right)
  30. {
  31. mid=(left+right)/2;
  32. if(value<=h[mid])
  33. right=mid-1;
  34. else
  35. left=mid+1;
  36. }
  37. return right;
  38. }
  39. long long int s[100001];
  40. int main()
  41. {
  42. long long h[100001], n, m, q, i, j, ls, cs, lj, cj, p1, p2;
  43. long long int sum;
  44. in>>n>>m;
  45. for(i=1; i<=n; i++)
  46. {
  47. in>>h[i];
  48. s[i]=s[i-1]+h[i];
  49. }
  50. in>>q;
  51. for(i=1; i<=q; i++)
  52. {
  53. in>>cs>>ls>>cj>>lj;
  54. if(ls>lj)
  55. swap(ls, lj);
  56. if(cs>cj)
  57. swap(cs, cj);
  58. sum=0;
  59. if(cs==cj)
  60. {
  61. if(h[cs]<ls)
  62. sum=0;
  63. else if(h[cs]<lj)
  64. sum=h[cs]-ls+1;
  65. else
  66. sum=lj-ls+1;
  67. }
  68. else
  69. {
  70. p1=searchbin1(h, cs, cj, ls);
  71. p2=searchbin2(h, cs, cj, lj)+1;
  72. sum+=s[p2-1]-s[p1]-(p2-p1-1)*(ls-1);
  73. sum+=(cj-p2+1)*(lj-ls+1);
  74. }
  75. out<<sum<<"\n";
  76. }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement