| 比赛 |
26暑假集训模拟赛2 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
| 题目名称 |
丹钓战 |
最终得分 |
100 |
| 用户昵称 |
郑霁桓 |
运行时间 |
3.980 s |
| 代码语言 |
C++ |
内存使用 |
27.18 MiB |
| 提交时间 |
2026-07-02 10:12:49 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,a[500005],b[500005],lt[500005],q[500005];
int tp,s[500005],tr[500005],l[500005],r;
vector<pair<int,int> >v[500005];
void ad(int x){
x++;
for(;x<=n+1;x+=x&(-x)) tr[x]++;
return;
}
int fd(int x){
x++;
long long ss=0;
for(;x;x-=x&(-x)) ss+=tr[x];
return ss;
}
int main(){
freopen("stack.in","r",stdin);
freopen("stack.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) cin>>b[i];
for(int i=1;i<=n;i++){
while(tp&&(a[q[tp]]==a[i]||b[q[tp]]<=b[i])) tp--;
lt[i]=q[tp];
q[++tp]=i;
}
for(int i=1;i<=m;i++){
cin>>l[i]>>r;
v[r].push_back({l[i],i});
}
for(int i=1;i<=n;i++){
ad(lt[i]);
for(int j=0;j<v[i].size();j++){
s[v[i][j].second]=fd(v[i][j].first-1);
}
}
for(int i=1;i<=m;i++){
cout<<s[i]-l[i]+1<<"\n";
}
return 0;
}