站外题求助!!
  • 板块灌水区
  • 楼主luogu_fkx
  • 当前回复8
  • 已保存回复9
  • 发布时间2024/11/20 19:25
  • 上次更新2024/11/20 20:56:16
查看原帖
站外题求助!!
1229527
luogu_fkx楼主2024/11/20 19:25

最小最大对

题目描述

给你一个长度为N的由1到N之间的整数组成的整数序列a=(a1,

…,aN)。

求出满足以下条件的整数对(i,j)的数量:

l 1<=i<j<=N

l min(ai,aj)=i

l max(ai,aj)=j

约束条件:

2<=N<=5*10^5

1<=ai<=N(1<=i<=N)

输入均为整数。

输入

N

a1 a2 ... aN

输出

一行,一个整数。

样例输入 复制

4

1 3 2 4

样例输出 复制

2

提示

注:(i,j)=(1,4),(2,3)都满足条件。

样例输入2:

10

5 8 2 2 1 6 7 2 9 10

样例输出2:

8

我的代码如下:样例1输出5

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,i,a[500010],s,ans,j;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>n;
	for(i=1;i<=n;i++)cin>>a[i];
	for(i=1;i<=n;i++)
		if(a[i]==i)
			s++;
	ans=s*(s-1)/2;
	for(j=1;j<=n;j++){
		i=a[j];
		if(a[i]==j)ans++,cout<<j<<" ";
	}
	cout<<ans;
	return 0;
}

2024/11/20 19:25
加载中...