Advertisement
sidjha57

Min query

Jun 26th, 2021
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.08 KB | None | 0 0
  1. //template
  2.  
  3. #include<bits/stdc++.h>
  4. //#include<ext/pb_ds/assoc_container.hpp>
  5. //#include<ext/pb_ds/tree_policy.hpp>
  6. //#include <ext/pb_ds/trie_policy.hpp>
  7. //using namespace __gnu_pbds;
  8. using namespace std;
  9. //typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> pbds;
  10. //typedef trie<string,null_type,trie_string_access_traits<>,pat_trie_tag,trie_prefix_search_node_update> pbtrie;
  11.  
  12. #define ll long long int
  13. #define ld long double
  14. #define mod 1000000007
  15. #define inf 1e18
  16. #define endl "\n"
  17. #define pb push_back
  18. #define vi vector<ll>
  19. #define vs vector<string>
  20. #define pii pair<ll,ll>
  21. #define ump unordered_map
  22. #define mp make_pair
  23. #define pq_max priority_queue<ll>
  24. #define pq_min priority_queue<ll,vi,greater<ll> >
  25. #define all(n) n.begin(),n.end()
  26. #define ff first
  27. #define ss second
  28. #define mid(l,r) (l+(r-l)/2)
  29. #define bitc(n) __builtin_popcount(n)
  30. #define SET(a) memset( a, -1, sizeof a )
  31. #define CLR(a) memset( a, 0, sizeof a )
  32. #define Pi 3.141592653589793
  33. #define loop(i,a,b) for(int i=(a);i<=(b);i++)
  34. #define looprev(i,a,b) for(int i=(a);i>=(b);i--)
  35. #define _fast ios_base::sync_with_stdio(0); cin.tie(0);
  36. #define iter(container,it) for(__typeof(container.begin()) it = container.begin(); it != container.end(); it++)
  37. #define log(args...) {string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
  38. #define logarr(arr,a,b) for(int z=(a);z<=(b);z++) cout<<(arr[z])<<" ";cout<<endl;
  39. template <typename T> T gcd(T a, T b){if(a%b) return gcd(b,a%b);return b;}
  40. template <typename T> T lcm(T a, T b){return (a*(b/gcd(a,b)));}
  41. vs tokenizer(string str,char ch) {std::istringstream var((str)); vs v; string t; while(getline((var), t, (ch))) {v.pb(t);} return v;}
  42.  
  43. void err(istream_iterator<string> it) {}
  44. template<typename T, typename... Args>
  45. void err(istream_iterator<string> it, T a, Args... args) {
  46. cout << *it << " = " << a << endl;
  47. err(++it, args...);
  48. }
  49.  
  50. int B=450;
  51. const ll MAX = 10e10;
  52. int getBlock (int id){
  53. return id/B;
  54. }
  55. void solve() {
  56. ll n,q,qtype; cin >> n >> q;
  57. ll arr[n+1],minBlock[n/B+1];
  58. loop (i,0,n/B) minBlock[i] = MAX;
  59. loop (i,1,n) {
  60. cin >> arr[i];
  61. if (minBlock[getBlock(i)] > arr[i]) minBlock[getBlock(i)] = arr[i];
  62. }
  63.  
  64.  
  65. while (q--) {
  66. cin >> qtype;
  67. if (qtype == 1) {
  68. ll k,u,j; cin >> k >> u;
  69. arr[k] = u;
  70. minBlock[getBlock(k)] = MAX;
  71. (getBlock(k) == 0) ? j = 1: j = (getBlock(k)-1)*B + 1;
  72. for (int i=j;i<=B+j && i<=n;i++) {
  73. if (minBlock[getBlock(i)] > arr[i]) minBlock[getBlock(i)] = arr[i];
  74. i++;
  75. }
  76. }
  77. else {
  78. ll a,b,min=MAX; cin >> a >> b;
  79. if (getBlock(a) == getBlock(b)) {
  80. loop (i,a,b)
  81. if (arr[i] < min) min = arr[i];
  82. }
  83.  
  84. else {
  85. loop (i,getBlock(a)+1,getBlock(b)-1)
  86. if (minBlock[i] < min) min = minBlock[i];
  87. ll i = a;
  88. while (getBlock(i) == getBlock(a)) {
  89. if (arr[i] < min) min = arr[i];
  90. i++;
  91. }
  92. i = b;
  93. while (getBlock(i) == getBlock(b)) {
  94. if (arr[i] < min) min = arr[i];
  95. i--;
  96. }
  97. }
  98. cout << min << "\n";
  99. }
  100. }
  101. }
  102.  
  103. int main(int argc, char const *argv[]){
  104. _fast
  105. ll t=1;
  106. while(t--){
  107. solve();
  108. }
  109. return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement