# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
803259 | guagua0407 | Group Photo (JOI21_ho_t3) | C++17 | 530 ms | 564 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
void setIO(string s) {
freopen((s + ".in").c_str(), "r", stdin);
freopen((s + ".out").c_str(), "w", stdout);
}
const int mxn=5005;
int pos[mxn];
int num[mxn];
ll dp[mxn];
int bit[2][mxn];
void update(int id,int pos,int val){
for(;pos<mxn;pos+=(pos&-pos)){
bit[id][pos]+=val;
}
}
int query(int id,int pos){
int ans=0;
for(;pos;pos-=(pos&-pos)){
ans+=bit[id][pos];
}
return ans;
}
int main() {_
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>num[i];
pos[num[i]]=i;
}
for(int i=1;i<=n;i++){
memset(bit[0],0,sizeof(bit[0]));
memset(bit[1],0,sizeof(bit[1]));
ll cur=0;
dp[i]=(ll)1e18;
for(int j=n;j>i;j--){
update(0,pos[j],1);
}
for(int j=i;j>=1;j--){
cur+=query(0,pos[j]);
cur+=query(1,n)-query(1,pos[j]);
//cout<<j<<' '<<i<<' '<<cur<<'\n';
dp[i]=min(dp[i],dp[j-1]+cur);
update(1,pos[j],1);
}
}
cout<<dp[n]<<'\n';
return 0;
}
//maybe its multiset not set
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |