Submission #371243

#TimeUsernameProblemLanguageResultExecution timeMemory
371243nafis_shifatGroup Photo (JOI21_ho_t3)C++14
100 / 100
1422 ms234860 KiB
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> using namespace std; const int mxn=5e3+5; const int inf=1e9; int h[mxn]; int pos[mxn]; ll dp1[mxn][mxn] = {}; ll dp2[mxn][mxn] = {}; struct BIT { int bit[mxn]; void init() { memset(bit,0,sizeof bit); } void update(int p,int v) { if(p==0) return; for(;p > 0;p -=p&-p) bit[p] += v; } int query(int p) { int r=0; for(;p < mxn; p +=p&-p) r += bit[p]; return r; } } bt; ll rev(int l,int r) { int p = l; bt.init(); for(int i = 1; i < l; i++) bt.update(pos[i],1); ll tot = 0; for(int i = r; i >= l; i--) { tot += bt.query(pos[i]); bt.update(pos[i],1); } return tot; } ll sor(int l,int r) { int p = l; bt.init(); for(int i = 1; i < l; i++) bt.update(pos[i],1); ll tot = 0; for(int i = l; i <= r; i++) { tot += bt.query(pos[i]); bt.update(pos[i],1); } return tot; } int main() { int n; cin >> n; for(int i = 1; i <= n; i++) { cin >> h[i]; pos[h[i]] = i; } BIT bt1; bt1.init(); for(int i = 1; i <= n; i++) { bt.init(); for(int j = i; j <= n; j++) { ll v1 = bt1.query(pos[j]); ll v2 = j - i - bt.query(pos[j]); bt.update(pos[j],1); dp1[i][j] = dp1[i][j - 1] + v1 + v2; } bt1.update(pos[i],1); } for(int i = 1; i <= n; i++) { bt.init(); for(int j = 1; j < i; j++) { bt.update(pos[j],1); } for(int j = i; j <= n; j++) { dp2[i][j] = dp2[i][j - 1] + bt.query(pos[j]); bt.update(pos[j],1); } } ll dp[n + 1]; dp[0] = 0; for(int i = 1; i <= n; i++) { dp[i] = inf; for(int j = i; j >= 1; j--) { dp[i] = min(dp[i],dp[j - 1] + min(dp1[j][i],dp2[j][i])); } } cout<<dp[n]<<endl; }

Compilation message (stderr)

Main.cpp: In function 'long long int rev(int, int)':
Main.cpp:30:6: warning: unused variable 'p' [-Wunused-variable]
   30 |  int p = l;
      |      ^
Main.cpp: In function 'long long int sor(int, int)':
Main.cpp:46:6: warning: unused variable 'p' [-Wunused-variable]
   46 |  int p = l;
      |      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...