Submission #472809

#TimeUsernameProblemLanguageResultExecution timeMemory
472809CSQ31Potatoes and fertilizers (LMIO19_bulves)C++17
100 / 100
212 ms15212 KiB
#include<bits/stdc++.h> using namespace std; #define pb push_back #define fi first #define se second #define mp make_pair #define all(a) a.begin(),a.end() #define sz(a) (int)(a.size()) #define lb lower_bound #define ub upper_bound #define owo ios_base::sync_with_stdio(0);cin.tie(0); #define MOD (ll)(1e9+7) #define INF (ll)(1e18) #define debug(...) fprintf(stderr, __VA_ARGS__),fflush(stderr) #define time__(d) for(long blockTime = 0; (blockTime == 0 ? (blockTime=clock()) != 0 : false);\ debug("%s time : %.4fs\n", d, (double)(clock() - blockTime) / CLOCKS_PER_SEC)) typedef long long int ll; typedef long double ld; typedef pair<ll,ll> PII; typedef pair<int,int> pii; typedef vector<vector<int>> vii; typedef vector<vector<ll>> VII; int main() { owo int n; cin>>n; ll d = 0; priority_queue<ll>q; q.push(0); vector<int>a(n),b(n); for(int i=0;i<n;i++)cin>>a[i]>>b[i]; ll p = 0; //dp value of the optimum point for(int i=0;i<n;i++){ d+=a[i] - b[i]; ll dt = d; if(d<0){ p-=dt; dt=0; } if(dt > q.top())q.push(dt); else{ p+=q.top() - dt; q.pop(); q.push(dt); q.push(dt); } } ll m = 0; //we want the dp value at point d //y = mx+c; //y = (m-1)x + c1 //c1 = c + x //c here is just p so we pop and add until we reach the segment that contains d while(q.top() > d){ m--; p+=q.top(); q.pop(); } cout<<d*m + p; }
#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...