Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll int
- #define dl double long
- #define foru(i, a, b) for (ll i = a; i < b; ++i)
- #define ford(i, a, b) for (ll i = a; i >= b; --i)
- #define pb push_back
- #define ppb pop_back
- #define X first
- #define C second
- /**#pragma GCC diagnostic error "-std=c++17"
- #pragma GCC target("avx")
- #pragma GCC optimize(3)
- #pragma GCC optimize("Ofast")
- #pragma GCC optimize("inline")
- #pragma GCC optimize("-fgcse")
- #pragma GCC optimize("-fgcse-lm")
- #pragma GCC optimize("-fipa-sra")
- #pragma GCC optimize("-ftree-pre")
- #pragma GCC optimize("-ftree-vrp")
- #pragma GCC optimize("-fpeephole2")
- #pragma GCC optimize("-ffast-math")
- #pragma GCC optimize("-fsched-spec")
- #pragma GCC optimize("unroll-loops")
- #pragma GCC optimize("-falign-jumps")
- #pragma GCC optimize("-falign-loops")
- #pragma GCC optimize("-falign-labels")
- #pragma GCC optimize("-fdevirtualize")
- #pragma GCC optimize("-fcaller-saves")
- #pragma GCC optimize("-fcrossjumping")
- #pragma GCC optimize("-fthread-jumps")
- #pragma GCC optimize("-funroll-loops")
- #pragma GCC optimize("-fwhole-program")
- #pragma GCC optimize("-freorder-blocks")
- #pragma GCC optimize("-fschedule-insns")
- #pragma GCC optimize("inline-functions")
- #pragma GCC optimize("-ftree-tail-merge")
- #pragma GCC optimize("-fschedule-insns2")
- #pragma GCC optimize("-fstrict-aliasing")
- #pragma GCC optimize("-fstrict-overflow")
- #pragma GCC optimize("-falign-functions")
- #pragma GCC optimize("-fcse-skip-blocks")
- #pragma GCC optimize("-fcse-follow-jumps")
- #pragma GCC optimize("-fsched-interblock")
- #pragma GCC optimize("-fpartial-inlining")
- #pragma GCC optimize("no-stack-protector")
- #pragma GCC optimize("-freorder-functions")
- #pragma GCC optimize("-findirect-inlining")
- #pragma GCC optimize("-fhoist-adjacent-loads")
- #pragma GCC optimize("-frerun-cse-after-loop")
- #pragma GCC optimize("inline-small-functions")
- #pragma GCC optimize("-finline-small-functions")
- #pragma GCC optimize("-ftree-switch-conversion")
- #pragma GCC optimize("-foptimize-sibling-calls")
- #pragma GCC optimize("-fexpensive-optimizations")
- #pragma GCC optimize("-funsafe-loop-optimizations")
- #pragma GCC optimize("inline-functions-called-once")
- #pragma GCC optimize("-fdelete-null-pointer-checks")
- #define _CRT_SECURE_NO_WARNINGS
- #pragma GCC optimize("Ofast")
- #pragma GCC optimize("no-stack-protector")
- #pragma GCC optimize("unroll-loops")
- #pragma GCC target("sse,sse2,sse3,ssse3,popcnt,abm,mmx,tune=native")
- #pragma GCC optimize("fast-math")
- #pragma warning(disable:4996) // */
- #pragma GCC optimize("no-stack-protector")
- #pragma comment(linker, "/STACK:256000000")
- using namespace std;
- namespace {
- const ll INF = 1e6 + 7, ZERO = 0;
- const dl EPS = 1e-7;
- ll n;
- vector<ll> arr;
- }
- struct Node{
- ll x, id, add;
- };
- vector<Node> tree;
- void relax(ll v, ll l, ll r) {
- if (tree[v * 2].x > tree[v * 2 + 1].x) {
- tree[v].id = tree[v * 2].id;
- } else {
- tree[v].id = tree[v * 2 + 1].id;
- }
- tree[v].x = max(tree[v * 2].x, tree[v * 2 + 1].x);
- }
- void build(ll v, ll l, ll r) {
- if (r - l == 1) {
- tree[v].x = arr[l];
- tree[v].id = r;
- return;
- }
- ll m = (r + l) / 2;
- build(v * 2, l, m);
- build(v * 2 + 1, m, r);
- relax(v, l, r);
- }
- void push(ll v, ll l, ll r) {
- ll add = tree[v].add;
- tree[v].add = 0;
- tree[v * 2].x += add;
- tree[v * 2].add += add;
- tree[v * 2 + 1].x += add;
- tree[v * 2 + 1].add += add;
- }
- pair<ll, ll> get(ll v, ll l, ll r, ll ql, ll qr) {
- if (l >= qr || r <= ql) {
- return {-1, -1};
- }
- if (l >= ql && r <= qr) {
- return {tree[v].x, tree[v].id};
- }
- ll m = (r + l) / 2;
- push(v, l, r);
- return max(get(v * 2, l, m, ql, qr), get(v * 2 + 1, m, r, ql, qr));
- }
- void upd(ll v, ll l, ll r, ll ql, ll qr, ll d) {
- if (l >= qr || r <= ql) {
- return;
- }
- if (l >= ql && r <= qr) {
- tree[v].x += d;
- tree[v].add += d;
- return;
- }
- ll m = (r + l) / 2;
- upd(v * 2, l, m, ql, qr, d);
- upd(v * 2 + 1, m, r, ql, qr, d);
- relax(v, l, r);
- }
- int main() {
- // freopen("in.txt", "r", stdin);
- // freopen("out.txt", "w", stdout);
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- cin >> n;
- tree.resize(4 * n);
- arr.resize(n);
- foru(i, 0, n) {
- cin >> arr[i];
- }
- build(1, 0, n);
- ll m;
- cin >> m;
- foru(i, 0, m) {
- ll x, y;
- cin >> x >> y;
- cout << get(1, 1, n, x - 1, y).C << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement