CF1703F Yet Another Problem About Pairs Satisfying an Inequality#806(div.4)

题目链接

https://codeforces.com/problemset/problem/1703/F

题意简述

image

样例

点击查看样例

image

分析

对于不满足 \(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;
}

posted @ 2022-09-17 19:26  LZH_03  阅读(46)  评论(0编辑  收藏  举报