Submission #1197624

#TimeUsernameProblemLanguageResultExecution timeMemory
1197624ASN49KPotatoes and fertilizers (LMIO19_bulves)C++20
100 / 100
641 ms55212 KiB
#include <bits/stdc++.h> #define all(x) x.begin(),x.end() using i64 = long long; #define int long long std::mt19937 rng(69); signed main() { int n; std::cin>>n; std::vector<int>extra(n); int all_extra = 0; for(int i=0;i<n;i++) { int a,b; std::cin>>a>>b; extra[i]=a-b; all_extra+=extra[i]; } std::multiset<int>a,b; a.insert(0); b.insert(0); int lazy_a=0,lazy_b=0; for(int i=1;i<n;i++) { // lazy_b+=extra[i]; if(extra[i]<0) { lazy_a+=extra[i]; } //adaug pante a.insert(-lazy_a); b.insert(-lazy_b); while(*a.rbegin()+lazy_a>*b.begin()+lazy_b) { int aa=*a.rbegin(); int bb=*b.begin(); a.erase(a.find(aa)); b.erase(b.find(bb)); aa+=lazy_a-lazy_b; bb+=-lazy_a+lazy_b; a.insert(bb); b.insert(aa); } } int last=0,panta=-n; i64 rez=0; for(auto &oldc:a) { int c=oldc+lazy_a; c=std::min(c,all_extra); if(c>last) { rez-=panta*(c-last); last=c; } panta++; } for(auto &oldc:b) { int c=oldc+lazy_b; c=std::min(c,all_extra); if(c>last) { rez-=panta*(c-last); last=c; } panta++; } rez-=panta*(all_extra-last); //std::cout<<rez<<' '; //calculez pl mea dp ul in all_extra std::vector<int>need(n+1,0); for(int i=0;i<n;i++) { if(extra[i]<0) { need[i]=-extra[i]; } } need[n]=all_extra+1; for(int i=0,j=0;i<n;i++) { int xd=extra[i]; while(xd>0) { int mn=std::min(xd , need[j]); need[j]-=mn; xd-=mn; rez+=abs(i-j)*mn; while(need[j]==0) { j++; } } } std::cout<<rez; } /* 2 2 0 0 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...
#Verdict Execution timeMemoryGrader output
Fetching results...