結果

問題 No.2382 Amidakuji M
ユーザー cho435cho435
提出日時 2023-07-14 22:23:58
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 64 ms / 2,000 ms
コード長 896 bytes
コンパイル時間 4,184 ms
コンパイル使用メモリ 259,912 KB
実行使用メモリ 5,436 KB
最終ジャッジ日時 2023-10-14 12:39:47
合計ジャッジ時間 5,842 ms
ジャッジサーバーID
(参考情報)
judge12 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,348 KB
testcase_01 AC 1 ms
4,348 KB
testcase_02 AC 2 ms
4,352 KB
testcase_03 AC 26 ms
4,356 KB
testcase_04 AC 47 ms
4,892 KB
testcase_05 AC 8 ms
4,352 KB
testcase_06 AC 29 ms
4,352 KB
testcase_07 AC 18 ms
4,348 KB
testcase_08 AC 3 ms
4,356 KB
testcase_09 AC 40 ms
4,712 KB
testcase_10 AC 59 ms
5,172 KB
testcase_11 AC 22 ms
4,352 KB
testcase_12 AC 41 ms
4,628 KB
testcase_13 AC 2 ms
4,348 KB
testcase_14 AC 1 ms
4,348 KB
testcase_15 AC 2 ms
4,348 KB
testcase_16 AC 1 ms
4,352 KB
testcase_17 AC 1 ms
4,348 KB
testcase_18 AC 2 ms
4,348 KB
testcase_19 AC 64 ms
5,436 KB
testcase_20 AC 64 ms
5,436 KB
testcase_21 AC 64 ms
5,364 KB
権限があれば一括ダウンロードができます

ソースコード

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