Wa#17 #18 求hack
查看原帖
Wa#17 #18 求hack
993429
GuaGuaGuaXTF楼主2024/8/23 20:09
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
const int maxn = 1e6 + 7 ;
inline ll read(){
	ll x = 0 , f = 1 ;
	char c = getchar() ;
	while(c > '9' || c < '0'){
		if(c == '-')
			f = -1 ;
		c = getchar() ;
	}
	while(c >= '0' && c <= '9'){
		x = x * 10 + c - '0' ;
		c = getchar() ;
	}
	return x * f ;
}

ll t , n , m , k , Res[maxn] , cnt , a[maxn] , rt[maxn] , ans[maxn] ;
char s[maxn] , S[maxn] ;
bool vis[maxn] ;

int main(){
	n = read() ;
	for(int i = 1 ; i <= n ; i ++){
		a[i] = read() ;
		rt[a[i]] = i ;
	}
	map < ll , ll > mp ;
	for(int i = 2 ; i <= n ; i ++){
		mp[__gcd(a[i] , a[i - 1])] ++ ;
	}
	ans[1] = n ;
	for(int i = 2 ; i <= n ; i ++){
		if(rt[i] == 1){
			mp[__gcd(a[rt[i]] , a[rt[i] + 1])] -- ;
			if(mp[i] > 0){
				ans[i] = n ;
			}
			else{
				ans[i] = n - 1 ;
			}
			mp[__gcd(a[rt[i]] , a[rt[i] + 1])] -- ;
			continue ;
		}
		if(rt[i] == n){
			mp[__gcd(a[rt[i]] , a[rt[i] - 1])] -- ;
			if(mp[i] > 0){
				ans[i] = n ;
			}
			else{
				ans[i] = n - 1 ;
			}
			mp[__gcd(a[rt[i]] , a[rt[i] - 1])] ++ ;
			continue ;
		}
		mp[__gcd(a[rt[i]] , a[rt[i] + 1])] -- ;
		mp[__gcd(a[rt[i]] , a[rt[i] - 1])] -- ;
		if(mp[i] > 0){
			ans[i] = n ;
		}
		else{
			ans[i] = n - 1 ;
		}
		mp[__gcd(a[rt[i]] , a[rt[i] + 1])] ++ ;
		mp[__gcd(a[rt[i]] , a[rt[i] - 1])] ++ ;
	}
	for(int i = 1 ; i <= n ; i ++){
		cout << ans[i] << " " ;
	}
	cout << endl ;
	return 0 ;
}
2024/8/23 20:09
加载中...