結果
問題 | No.2382 Amidakuji M |
ユーザー | cho435 |
提出日時 | 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 |
ソースコード
#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; } } }