結果

問題 No.2382 Amidakuji M
ユーザー cho435cho435
提出日時 2023-07-14 22:23:58
言語 C++17(gcc12)
(gcc 12.3.0 + boost 1.87.0)
結果
AC  
実行時間 66 ms / 2,000 ms
コード長 896 bytes
コンパイル時間 5,273 ms
コンパイル使用メモリ 262,068 KB
実行使用メモリ 5,760 KB
最終ジャッジ日時 2024-09-16 07:29:41
合計ジャッジ時間 5,228 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 19
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using ll = long long;
#define rep(i,n) for(int i=0;i<(int)(n);i++)
using mint = atcoder::modint998244353;

struct BIT{
	vector<ll> bit;
	BIT(int n) :bit(n+1,0){};
	void add(int i,ll v){
		i++;
		while(i<bit.size()){
			bit.at(i)+=v; // <-
			i+=(i&-i);
		}
	}
	ll Rsum(int i){
		ll rt=0;
		while(i>0){
			rt+=bit.at(i); // <-
			i-=(i&-i);
		}
		return rt;
	}
	ll sum(int l,int r){
		if(r<=l) return 0;
		return Rsum(r)-Rsum(l); // <-
	}
};

ll tnto(const vector<int> &v){
	int n=v.size();
	BIT fn(n+1);
	ll rt=0;
	rep(i,n){
		rt+=i-fn.Rsum(v.at(i));
		fn.add(v.at(i),1);
	}
	return rt;
}

int main(){
	ll n,m;
	cin>>n>>m;
	vector<int> p(n);
	rep(i,n) cin>>p.at(i);
	ll k=tnto(p);
	if(k%2&&m%2==0){
		cout<<-1<<endl;
	}else{
		ll cm=m;
		m=((k+m-1)/m)*m;
		if((m-k)%2){
			cout<<m+cm<<endl;
		}else{
			cout<<m<<endl;
		}
	}
}
0