比赛 26暑假集训模拟赛2 评测结果 WAWWWATTTTTTTTTTTTTT
题目名称 丹钓战 最终得分 10
用户昵称 杨蕙宇 运行时间 17.933 s
代码语言 C++ 内存使用 6.45 MiB
提交时间 2026-07-02 10:34:00
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,q,a[N],b[N],pre[N],mk[N],f,s[N];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    freopen("stack.in","r",stdin);
    freopen("stack.out","w",stdout);
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]!=i)f=1;
    }
    for(int i=1;i<=n;i++)cin>>b[i];
//    if(!f){
        
//    }
//    else{
        for(int i=1;i<=n;i++){
            for(int j=i-1;j>=1;j--){
                if(a[j]!=a[i]&&b[j]>b[i]){
                    pre[i]=j;
                    break;
                }
            }
        }
        for(int i=1;i<=n;i++){
            s[i]=s[i-1];
            if(!pre[i])mk[i]=1;
            if(s[i]-s[pre[i]]>0)mk[i]=1;
            s[i]+=mk[i];
        }
        while(q--){
            int l,r,cnt=0;;
            cin>>l>>r;
            for(int i=l;i<=r;i++){
                if(pre[i]<l||mk[i])cnt++;
            }
            cout<<cnt<<"\n";
        }
//    }
//    while(q--){
//        int l,r;
//        cin>>l>>r;
//        cout<<query(l,r)<<"\n";
//    }
    return 0;
}
/*
10 4
3 1 3 1 2 3 3 2 1 1
10 10 2 9 7 5 4 7 6 1
1 4
7 8
7 10
1 8
*/