結果
問題 | 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; } } }