結果
| 問題 |
No.2382 Amidakuji M
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-07-14 22:23:58 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 76 ms / 2,000 ms |
| コード長 | 896 bytes |
| コンパイル時間 | 4,409 ms |
| コンパイル使用メモリ | 251,376 KB |
| 最終ジャッジ日時 | 2025-02-15 14:15:54 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 19 |
ソースコード
#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;
}
}
}