Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define endl '\n'
- #define INF 0x3f3f3f3f
- #define MAXN 100500
- using namespace std;
- int arr[MAXN];
- int dp[MAXN][17];
- int lg2(int n) {
- int i = 0;
- while (n > 1) {
- n /= 2;
- i++;
- }
- return i;
- }
- void process(int n) {
- for (int i = 0; i < n; i++) {
- dp[i][0] = arr[i];
- }
- int k = log(MAXN)+1;
- for (int j = 1; j < k; j++) {
- for (int i = 0; i+(1 << j) <= n; i++) {
- dp[i][j] = min(dp[i][j-1], dp[i + (1 << (j-1))][j-1]);
- }
- }
- }
- int query(int i, int j) {
- int lg = log(j - i + 1);
- return min(dp[i][lg], dp[j - (1 << lg) + 1][lg]);
- }
- int main(){
- int n, q;
- cin >> n;
- for (int i = 0; i < n; i++){
- cin >> arr[i];
- }
- process(n);
- cin >> q;
- int i, j;
- while (q--) {
- cin >> i >> j;
- cout << query(i, j) << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment