Guest User

Untitled

a guest
Jul 7th, 2020
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 KB | None | 0 0
  1.  
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5. #pragma GCC optimize("Ofast")
  6. #pragma GCC optimize("unroll-loops")
  7. #pragma GCC optimize ("-ffloat-store")
  8. #pragma GCC optimize ("-fno-defer-pop")
  9.  
  10. typedef long long int ll;
  11. typedef long double ld;
  12.  
  13. #define MAX 100005
  14.  
  15. ll sparse_table[2*MAX][21];
  16. ll A[2*MAX], B[2*MAX], C[2*MAX];
  17.  
  18. struct Line {
  19. ll a, b;
  20. ll value(ll x){
  21. return a*x + b;
  22. }
  23. };
  24.  
  25. bool cmp(const Line &one, const Line &two){
  26. if(one.a > two.a)return true;
  27. if(one.a == two.a && one.b > two.b)return true;
  28. return false;
  29. };
  30.  
  31. void preprocess(ll *ans, ll n){
  32.  
  33. for(ll i=0;i<n;i++){
  34. sparse_table[i][0] = ans[i];
  35. }
  36.  
  37. for(ll j=1;j<=20;j++){
  38. for(ll i=0;i<n;i++){
  39. if(i+(1LL<<(j-1)) < n){
  40. sparse_table[i][j] = min(sparse_table[i][j-1], sparse_table[i+(1LL<<(j-1))][j-1]);
  41. //cout<<i<<" "<<j<<" "<<sparse_table[i][j]<<endl;
  42. }
  43. }
  44. }
  45.  
  46. }
  47.  
  48. int main()
  49. {
  50. //~ #ifndef ONLINE_JUDGE
  51. //~ freopen("test_cases/test_case4.txt", "r", stdin);
  52. //~ freopen("test_cases/test_case4_output.txt", "w", stdout);
  53. //~ #endif
  54. ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
  55.  
  56. ll n, m;
  57. cin>>n>>m;
  58. for(ll i=0;i<n;i++)cin>>A[i];
  59. for(ll i=0;i<m;i++)cin>>B[i];
  60. for(ll i=0;i<m;i++)cin>>C[i];
  61. vector < pair <ll,ll> > vec;
  62.  
  63. for(ll i=0;i<n;i++){
  64. vec.push_back({A[i], i});
  65. }
  66. sort(vec.begin(), vec.end());
  67.  
  68. vector <Line> lines;
  69.  
  70. for(ll i=0;i<m;i++){
  71. lines.push_back({B[i], C[i]});
  72. }
  73. sort(lines.begin(), lines.end(), cmp);
  74.  
  75. ll ans[n];
  76.  
  77. ll start = 0;
  78.  
  79. for(ll i=0;i<n;i++){
  80. ll x = vec[i].first;
  81. while(start < (ll) lines.size() - 1){
  82. if(lines[start].value(x) > lines[start+1].value(x)){
  83. start++;
  84. }
  85. else{
  86. break;
  87. }
  88. }
  89. ans[vec[i].second] = lines[start].value(x);
  90. }
  91. preprocess(ans, n);
  92. ll q;
  93. cin>>q;
  94.  
  95. while(q--){
  96. ll l, r;
  97. cin>>l>>r;
  98. l--;
  99. r--;
  100. ll diff = r-l+1;
  101. ll val = log2(diff);
  102. cout<<min(sparse_table[l][val], sparse_table[r-(1LL<<val)+1][val])<<"\n";
  103. }
  104.  
  105.  
  106. }
Add Comment
Please, Sign In to add comment