比赛 CSP2023-J模拟赛 评测结果 AAAAAAAAAAWWWAAAAAAA
题目名称 排列变换 最终得分 85
用户昵称 darkMoon 运行时间 0.631 s
代码语言 C++ 内存使用 18.13 MiB
提交时间 2023-10-18 19:05:56
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
#define mp make_pair
#define fi first
#define se second
using namespace std;
auto read = [](){
	int x;
	scanf("%lld", &x);
	return x;
};
const int N = 1e6 + 5;
int n, a[N], ma, now, pos, e[N], jia[N], jian[N];
set<pair<int, int> > s;
signed main(){
	freopen("permutrans.in", "r", stdin);
	freopen("permutrans.out", "w", stdout);
	n = read();
	for(int i = 1; i <= n; i ++){
		a[i] = read();
		if(a[i] >= i)
		now ++;
		if(a[i] != n)
		jia[n - i + 1] ++;
		int t = a[i] - i + 1;
		if(t < n - i + 1 && t > 0)
		jian[t] ++;
		
		t = n - i + 1 + a[i];
		if(t < n)
		jian[t] ++;
	}
	for(int i = 1; i < n; i ++){
		now += jia[i] - jian[i];
//		printf("***%lld %lld %lld\n", now, jia[i], jian[i]);
		if(now > ma)
		ma = now, pos = i;
	}
//	for(int i = 1; i <= n; i ++){
//		a[i] = read();
//		if(a[i] - i >= 0){
//			s.insert(mp(a[i] - i, a[i]));
//			now ++;
//		}
//	}
//	ma = now, pos = 0;
//	for(int i = 1; i < n; i ++){
//		int t = n - i + 1;
//		if(a[t] - t >= 0 && e[a[t]] == 0){
//			s.erase(mp(a[t] - t, a[t]));
//			now --;
//		}
//		now ++;
//		s.insert(mp(a[t] - 1 + i, a[t]));
//		while((*s.begin()).fi - i < 0){
//			s.erase(s.begin());
//			e[(*s.begin()).se] = 1;
//			now --;
//		}
//		if(now > ma)
//		ma = now, pos = i;
//	}
	printf("%lld %lld", ma, pos);
	return 0;
}