fork download
  1. #include <bits/stdc++.h>
  2. #define lb lower_bound
  3. #define pii pair<ll,ll>
  4. #define fi first
  5. #define ll long long
  6. #define se second
  7. #define ios ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
  8. #define op freopen
  9. #define sz size
  10. #define TXT "test"
  11. #define freo if(fopen(TXT".inp","r")){op(TXT".inp","r",stdin);op(TXT".out","w",stdout);}
  12.  
  13. using namespace std;
  14.  
  15. ll n, m, k, a[100005], b[100005];
  16. ll rmq[100005][18], lg[100005];
  17.  
  18. void setup()
  19. {
  20. lg[1] = 0;
  21. for (ll i = 2; i <= n; ++i)
  22. {
  23. lg[i] = lg[i / 2] + 1;
  24. }
  25. for (ll i = 1; i <= n; ++i)
  26. {
  27. rmq[i][0] = a[i];
  28. }
  29. for (ll j = 1; (1 << j) <= n; ++j)
  30. {
  31. for (ll i = 1; i + (1 << j) - 1 <= n; ++i)
  32. {
  33. rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
  34. }
  35. }
  36. }
  37.  
  38. ll query(ll l, ll r)
  39. {
  40. ll j = lg[r - l + 1];
  41. return min(rmq[l][j], rmq[r - (1 << j) + 1][j]);
  42. }
  43. main()
  44. {
  45. ios;
  46. freo;
  47. cin >> n >> m >> k;
  48. for (ll i = 1; i <= n; ++i)
  49. cin >> a[i];
  50. for (ll i = 1; i <= m; ++i)
  51. cin >> b[i];
  52. sort(b + 1, b + 1 + m);
  53. for (ll i = 1; i <= n; ++i)
  54. {
  55. auto it = lb(b + 1, b + 1 + m, a[i]);
  56. if (it == b + 1 + m) --it;
  57. a[i] = abs(*it - a[i]);
  58. }
  59. setup();
  60. while (k--)
  61. {
  62. ll l, r;
  63. cin >> l >> r;
  64. cout << query(l, r) << "\n";
  65. }
  66. }
  67.  
Success #stdin #stdout 0.01s 7692KB
stdin
3 4 3
1 5 7
4 -1 3 9
1 3
1 1
2 2
stdout
2
2
4