Advertisement
bero_0401

segment tree on 2d

Jul 19th, 2024
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. const int N = 1e4+5;
  2. const int LOG = 18;
  3.  
  4. int m[N][N];
  5.  
  6. void solve() {
  7. ll n , q; cin>>n;
  8. vector<int> v(n + 1);
  9.  
  10. for (int i = 1; i <= n; i++) {
  11. cin >> v[i];
  12. }
  13. for (int i = 1; i <= n; i++) {
  14. for (int j = 1; j <= n; j++) {
  15. m[i][j] = INT_MAX;
  16. }
  17. }
  18. for (int i = 1; i <= n; i++) {
  19. for (int j = i + 1; j <= n; j++) {
  20. m[n - i + 1][j] = abs(v[j] - v[i]);
  21. }
  22. }
  23.  
  24. for (int i = 1; i <= n; i++) {
  25. for (int j = 1; j <= n; j++) {
  26. // cout<<m[i][j]<<" ";
  27. }
  28. // cout<<"\n";
  29. }
  30.  
  31. for (int i = 1; i <= n; i++) {
  32. for (int j = 1; j <= n; j++) {
  33. int k = j + (j & -j);
  34. if(k <= n) {
  35. m[i][k] = min(m[i][k], m[i][j]);
  36. }
  37. }
  38. int k = i + (i & -i);
  39. if(k <= n) {
  40. for (int j = 1; j <= n; j++) {
  41.  
  42. m[k][j] = min(m[k][j], m[i][j]);
  43. }
  44. }
  45. }
  46.  
  47. cin>>q;
  48. while(q--)
  49. {
  50. int l , r; cin>>l>>r;
  51. l = n-l+1;
  52.  
  53. int ans = INT_MAX;
  54.  
  55. for (int i = l; i > 0; i -= (i&-i)) {
  56. for (int j = r; j > 0; j -= (j&-j)) {
  57. ans = min(ans, m[i][j]);
  58. }
  59. }
  60. cout<< ans<<"\n";
  61. }
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement