Submission #42358

#TimeUsernameProblemLanguageResultExecution timeMemory
42358dqhungdl즐거운 채소 기르기 (JOI14_growing)C++14
100 / 100
117 ms8560 KiB
#include <bits/stdc++.h> using namespace std; typedef pair<int64_t,int64_t> ii; int64_t n,res=0,treeL[300005],treeR[300005]; ii a[300005]; void UpdateL(int64_t idx) { while(idx>0) { treeL[idx]++; idx-=idx&-idx; } } int64_t QueryL(int64_t idx) { int64_t rs=0; while(idx<=n) { rs+=treeL[idx]; idx+=idx&-idx; } return rs; } void UpdateR(int64_t idx) { while(idx<=n) { treeR[idx]++; idx+=idx&-idx; } } int64_t QueryR(int64_t idx) { int64_t rs=0; while(idx>0) { rs+=treeR[idx]; idx-=idx&-idx; } return rs; } int main() { ios_base::sync_with_stdio(false); //freopen("TEST.INP","r",stdin); cin>>n; for(int64_t i=1; i<=n; i++) { cin>>a[i].first; a[i].second=i; } sort(a+1,a+n+1); int64_t tmp=1,L=0,R=n+1; for(int64_t i=2; i<=n; i++) if(a[i].first!=a[i-1].first) { int64_t id=-1,l=tmp,r=i-1; while(l<=r) { int64_t posl=a[l].second+QueryL(a[l].second)-QueryR(a[l].second); int64_t posr=a[r].second+QueryL(a[r].second)-QueryR(a[r].second); int64_t moveL=posl-L-1; int64_t moveR=R-posr-1; res+=min(moveL,moveR); if(moveL<moveR) { UpdateL(a[l].second); l++; L++; } else { UpdateR(a[r].second); r--; R--; } } tmp=i; } cout<<res; }

Compilation message (stderr)

growing.cpp: In function 'int main()':
growing.cpp:63:21: warning: unused variable 'id' [-Wunused-variable]
             int64_t id=-1,l=tmp,r=i-1;
                     ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...