QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#813734#9886. Long Sequence Inversion 2ucup-team3646#WA 42ms10900kbC++202.7kb2024-12-14 12:13:352024-12-14 12:13:36

Judging History

你现在查看的是最新测评结果

  • [2024-12-14 12:13:36]
  • 评测
  • 测评结果:WA
  • 用时:42ms
  • 内存:10900kb
  • [2024-12-14 12:13:35]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define rep(i, n) for(ll i = 0; i < n; ++i)
#define rep2(i, l, r) for(ll i = l; i < r; ++i)

using vi = vector<int>;
using vvi = vector<vi>;
using vll = vector<ll>;

#define all(A) A.begin(), A.end()
#define elif else if
using pii = pair<ll, ll>;

bool chmin(auto &a, auto b) {return a > b ? a = b, 1 : 0;}
bool chmax(auto &a, auto b) {return a < b ? a = b, 1 : 0;}

struct IOSetup {
  IOSetup() {
    cin.tie(0);
    ios::sync_with_stdio(0);
  }
} iosetup;

template<class T>
void print(vector<T> a) {
  for(auto x : a) cout << x << ' ';
  cout << endl;
}

void print(auto x) {cout << x << endl;}

template<class Head, class... Tail>
void print(Head &&head, Tail &&...tail) {
  cout << head << ' ';
  print(forward<Tail>(tail)...);
}


ll cost(ll xi,ll yi,ll xj, ll yj,ll xk,ll yk){
  // i -> j -> k -> i
  ll x=min(xj,xk);
  ll y=min(yj,yk);
  return ((x-xi)+(y-yi)+(xj-x)+(yj-y)+(xk-x)+(yk-y));
}

ll inf=1LL<<60;
vector<array<ll,2>>xy;

const ll mod=998244353;

ll modpow(ll a,ll n){
  ll r=1;
  while(n>0){
    r*=(a*(n%2));
    r%=mod;
    a=(a*a)%mod;
    n/=2;
  }
  return r;
}

vector<int> inv(vector<int> Q){
  int n=Q.size();
  vector<int> R(n);
  for(int i=0;i<n;i++)R[Q[i]]=i;
  return R;
}


struct BIT {
  ll n;
  vector<ll> data;

  BIT() = default;
  BIT(ll n) : n(n), data(n+1, 0) {}

  void add(ll x, ll val) {
    x++;
    for(; x <= n; x += x & -x) data[x] += val;
    return;
  }

  ll sum(ll x) {
    ll ret = 0;
    for(; x > 0; x -= x & -x) ret += data[x];
    return ret;
  }

  ll sum(ll lx, ll rx) {return sum(rx) - sum(lx);}
};


ll te(vector<int> Q){
  int n=Q.size();
  BIT B(n);
  ll res=0;
  for(int i=n-1;i>=0;i--){
    res+=B.sum(Q[i]);
    B.add(Q[i],1);
  }
  return res%mod;
}

int main(){
    int L,B;
    cin>>L>>B;
    vector<int> P(L);
    for(int i=0;i<L;i++)cin>>P[i];
    vector<int> IP=inv(P);

    vector<vector<int>> V(L,vector<int>(B));
    for(int i=0;i<L;i++){
      for(int j=0;j<B;j++){
        cin>>V[i][j];
      }
    }

    vector<ll> POW(2*L+1,1);
    for(int i=0;i<2*L;i++)POW[i+1]=(POW[i]*B)%mod;
    
    ll an=0;
    BIT BT(L);
    for(int i=0;i<L;i++)BT.add(i,1);
    
    for(int i=L-1;i>=0;i--){
      ll res=0;
      ll id=IP[i];
      ll t=te(V[id]);
      ll len=POW[BT.sum(0,id)];

      ll BL=POW[BT.sum(id+1,L)];

      res+=t*BL%mod;

      res+=((BL*(BL-1)/2)%mod)*((B*(B-1)/2)%mod)%mod;
      res%=mod;
      res*=(len*len%mod);
      res%=mod;
      res*=POW[L-1-i];
      res%=mod;
      an+=res;
      an%=mod;
      // cerr<<i<<" "<<res<<" "<<BL<<" "<<len<<endl;
      BT.add(id,-1);
    }
    cout<<an<<endl;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3528kb

input:

3 2
2 0 1
1 0
1 0
0 1

output:

14

result:

ok "14"

Test #2:

score: 0
Accepted
time: 0ms
memory: 3528kb

input:

2 4
1 0
2 0 3 1
1 2 3 0

output:

60

result:

ok "60"

Test #3:

score: 0
Accepted
time: 0ms
memory: 3824kb

input:

9 10
2 5 7 3 8 1 4 6 0
9 2 4 0 1 6 7 3 5 8
4 1 6 7 8 0 5 9 2 3
1 9 2 4 6 8 5 7 0 3
9 0 8 2 5 1 6 7 3 4
1 6 0 7 3 9 2 4 5 8
4 5 2 9 1 6 7 3 0 8
7 0 5 6 1 9 2 4 3 8
3 2 1 6 7 0 8 9 4 5
9 2 4 3 5 8 0 6 7 1

output:

138876070

result:

ok "138876070"

Test #4:

score: 0
Accepted
time: 42ms
memory: 10900kb

input:

1 499999
0
29619 375702 37496 460566 304389 460489 39603 7903 258016 288263 472075 22596 331493 275661 56064 364938 166384 286514 449089 71295 83634 202532 408346 34349 425929 67826 14897 21894 481996 394928 368071 394991 213881 134433 345718 371785 68019 323247 290861 175555 464454 99312 318279 474...

output:

633597495

result:

ok "633597495"

Test #5:

score: 0
Accepted
time: 35ms
memory: 8140kb

input:

2 249999
0 1
58555 86505 217289 160736 134400 101021 40586 62145 139626 85795 167411 201337 98 206983 47713 102694 69929 120989 89299 38007 101502 27064 176770 192694 169507 5163 4199 146210 77723 135393 61474 73326 132827 234968 141265 84204 225082 101831 136349 51115 81706 174808 187315 54745 2076...

output:

434358382

result:

ok "434358382"

Test #6:

score: -100
Wrong Answer
time: 33ms
memory: 7024kb

input:

3 166665
1 0 2
149754 119575 144273 87381 53800 132528 160539 144804 131044 71756 48801 102732 165255 134183 209 129510 122930 87083 34658 111061 142811 141126 65071 45113 142272 2250 137690 86010 2090 101555 148432 56852 17952 53004 11972 36883 144729 44003 59504 11894 15877 47449 95378 59419 12379...

output:

553705889

result:

wrong answer 1st words differ - expected: '906627900', found: '553705889'