Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define pfin(a) printf("%d\n",a);
- #define pfln(a) printf("%lld\n",a);
- #define pfis(a) printf("%d ",a);
- #define pfls(a) printf("%lld ",a);
- #define sfi(a) scanf("%d",&a);
- #define sfl(a) scanf("%lld",&a);
- #define fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
- #define f(i,a,b) for(int i=a;i<b;i++)
- #define pb(a) push_back(a);
- #define mp(a,b) make_pair(a,b)
- #define ll long long
- #define F first
- #define S second
- #define vi vector<int>
- #define vc vector<char>
- const ll mod=1e9+7;
- const int N=1e5+5;
- int arr[N];
- int n;
- int table[N][17];
- void build()
- {
- f(i,0,n)
- table[i][0]=arr[i];
- f(j,1,17)
- {
- for(int i=0;i+(1<<j)<=n;i++)
- {
- table[i][j]=max(table[i][j-1],table[i+(1<<(j-1))][j-1]);
- }
- }
- return;
- }
- int query(int l,int r)
- {
- int var=log2(r-l+1);
- int ans=max(table[l][var],table[r-(1<<var)+1][var]);
- return ans;
- }
- void solve()
- {
- int m;
- sfi(n)
- sfi(m)
- vi v[N];
- f(i,0,n)
- {
- sfi(arr[i])
- v[arr[i]].pb(i)
- }
- build();
- while(m--)
- {
- int l,r;
- sfi(l)
- sfi(r)
- l--;
- r--;
- int mx=query(l,r);
- auto itr1=upper_bound(v[mx].begin(),v[mx].end(),r)-v[mx].begin();
- auto itr2=upper_bound(v[mx].begin(),v[mx].end(),l-1)-v[mx].begin();
- cout<<itr1-itr2<<endl;
- }
- return;
- }
- int main()
- {
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement