Submission #1224867

#TimeUsernameProblemLanguageResultExecution timeMemory
1224867_rain_Arranging Tickets (JOI17_arranging_tickets)C++20
100 / 100
507 ms11712 KiB
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N=(int)2e5; LL f[N+2]={}; vector<pair<int,int>>upd[N+2]; int t,n,m; bool judge(LL x,LL lim){ if (lim<0) return false; vector<LL>add(n+2,0); priority_queue<pair<int,int>,vector<pair<int,int>>,less<pair<int,int>>>pq; LL cur_add=0; for(int i=1;i<=t;++i){ LL need=(f[i]+x-lim+1)/2; for(auto&xx:upd[i]) if (xx.first>t) pq.push(xx); while (cur_add<need){ if (pq.empty()) return false; int y=pq.top().second; int xx=pq.top().first; pq.pop(); if (cur_add+y<=need) cur_add+=y,add[xx]+=y; else { int add_more=need-cur_add; y-=add_more; add[xx]+=add_more,cur_add+=add_more; pq.push({xx,y}); } } } for(int i=t+1;i<=n;++i){ cur_add-=add[i]; if (f[i]+x-cur_add*2>lim) return false; } return true; } bool possible(LL m){ return judge(f[t]-m,m)||judge(f[t]-m+1,m); } int main(){ ios::sync_with_stdio(false); cin.tie(0) ; cout.tie(0); #define task "main" if (fopen(task".inp","r")){ freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } cin>>n>>m; LL mx=0; for(int i=1;i<=m;++i){ int a,b,c; cin>>a>>b>>c; if (a>b) swap(a,b); upd[a].push_back({b,c}); f[a]+=c,f[b]-=c; mx=max(mx,(LL)c); } for(int i=1;i<=n;++i) f[i]+=f[i-1]; t=0; for(int i=1;i<=n;++i) if (f[i]>f[t]) t=i; LL low=0,high=mx*m,ans=-1; assert(t!=-1); while (low<=high){ LL mid=(low+high)/2; bool exist=possible(mid); if (exist){ ans=mid; high=mid-1; } else low=mid+1; } cout<<ans; return 0; }

Compilation message (stderr)

arranging_tickets.cpp: In function 'int main()':
arranging_tickets.cpp:49:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   49 |                 freopen(task".inp","r",stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
arranging_tickets.cpp:50:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |                 freopen(task".out","w",stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...