Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef long long integer; // change
- const int LG = 20, NN = 300007; // change
- integer op(integer a, integer b) // change
- {
- return max(a, b);
- }
- int logs[NN];
- integer bin[LG][NN];
- vector<integer> sparce_table;
- integer find(int l, int r) // [l;r)
- {
- int x = logs[r - l];
- return op(bin[x][l], bin[x][r - (1 << x)]);
- }
- void buildBin(vector<ll> b)
- {
- sparce_table = b;
- int n = sparce_table.size();
- int cur = 0, x = 1;
- for (int i = 0; i < n + 2; i++)
- {
- if (2 * x == i)
- {
- x *= 2;
- cur++;
- }
- logs[i] = cur;
- }
- for (int i = 0; i < n; i++)
- bin[0][i] = sparce_table[i];
- for (int i = 0; i + 1 < LG; i++)
- for (int j = 0; j < n; j++)
- bin[i + 1][j] = op(bin[i][j], bin[i][min(j + (1 << i), n - 1)]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement