Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <vector>
- using namespace std;
- typedef pair<int, int> pii;
- typedef pair<long long, long long> pll;
- typedef long long ll;
- typedef short int shit;
- #define ff first
- #define ss second
- #define pb push_back
- struct gg{
- shit l, r, ind;
- };
- bool cmp(gg a, gg b){
- if(a.l == b.l)
- return a.r < b.r;
- return a.l < b.l;
- }
- vector<gg> q;
- int d[5000];
- shit ans[100000];
- int main(){
- //freopen("rmq.in", "r", stdin);
- //freopen("rmq.out", "w", stdout);
- int m;
- shit n, x;
- cin >> n >> m;
- q.resize(m);
- for(shit i = 0; i < n; i++){
- cin >> d[i];
- }
- for(int i = 0; i < m; i++){
- cin >> q[i].l >> q[i].r;
- q[i].l --; q[i].r --;
- q[i].ind = i;
- x = max(x, q[i].r);
- }
- sort(q.begin(), q.end(), cmp);
- int ptr = 0; bool isStop = 0;
- shit tr;
- for(shit l = 0; l <= x; l++){
- int curMin = INT_MAX;
- for(shit r = l; r <= x; r ++){
- if(curMin > d[r]){
- curMin = d[r];
- tr = r;
- }
- for(int i = ptr; i <= x && q[i].l == l && q[i].r == r; i++){
- ans[q[i].ind] = tr;
- ptr++;
- }
- if(ptr >= q.size()){
- isStop = true;
- break;
- }
- }
- if(isStop)
- break;
- }
- for(int i = 0; i < m; i++){
- cout << ans[i]+1 << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement