我这里mi是较大值,mii是较小值,过了65%样例。
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
int a[N];
void solve()
{
int n;cin>>n;
for(int i = 1;i<=n;i++)cin>>a[i];
int mii = a[1],mi = a[1];
unordered_map<int,int>pos;
ll ans = 0;
ll l = 1,r = 1;
a[0] = a[1];
for(int i = 1;i<=n;i++){
pos[a[i]] = i;
r = i;
if(a[i]==mi||a[i]==mii){
ans+=r-l+1;
}
else if((a[i]==mi+1||a[i]==mi-1)&&mi==mii){
ans+= r-l+1;
mi = max(mii,a[i]);
mii = min(mii,a[i]);
}
else if(a[i]==mi+1){
l = pos[mii]+1;
ans+=r-l+1;
mii = mi;
mi = a[i];
}
else if(a[i]==mii-1){
l = pos[mi]+1;
ans+=r-l+1;
mi = mii;
mii = a[i];
}
else {
l = i;
ans+=r-l+1;
mi = mii = a[i];
}
}
cout<<ans<<"\n";
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int T = 1;
cin>>T;
while (T--)
{
solve();
}
return 0;
}
全部评论
(0) 回帖