CF1703F Yet Another Problem About Pairs Satisfying an Inequality#806(div.4)
题目链接
https://codeforces.com/problemset/problem/1703/F
题意简述
样例
点击查看样例
分析
对于不满足 \(a_i < i\)的元素根本不用管它
那么题目中的 \(a_i<i<a_j<j\) 这个不等式我们就可以化简为 \(i<a_j\)
也就是只要找前 \(j-1\)个元素的下标中小于 \(a[ j ]\) 的下标有多少个.
现在你应该会了吧!
代码
点击查看代码
#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long LL;
const int N=2e5+10;
int a[N];
vector<int>s;
int main()
{
//freopen("uva.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
s.clear();
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]<i)
{
s.push_back(i);
}
}
LL sum=0;
for(int i=1;i<=n;i++)
{
if(a[i]>=i)continue;
sum+=lower_bound(s.begin(),s.end(),a[i])-s.begin();
}
printf("%lld\n",sum);
}
return 0;
}