不太理解第一个题解的做法
查看原帖
不太理解第一个题解的做法
947873
RedWen_shuo楼主2024/8/14 19:49
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <map>
using namespace std;
map<int,int> mp;
int n,b,a[100005],q,suml,sumr;
long long ans;
int main(){
    scanf("%d%d",&n,&b);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        if(a[i]==b) q=i;
    }
    for(int j=q;j<=n;j++){
        if(a[j]>b) sumr++;
        if(a[j]<b) sumr--;
        mp[sumr]++;
    }
    for(int i=q;i>=1;i--){
        if(a[i]>b) suml++;
        if(a[i]<b) suml--;
        ans+=mp[0-suml];
    }
    printf("%lld",ans);
} 

这种map映射的操作如何求出正确值的, 具体原理是怎样的, 手模样例也还是不太明白,有dalao能给本蒟蒻讲一下ma

2024/8/14 19:49
加载中...