#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define MOD 1000000007
#define INF 1000000019
#define POT (1<<21)
#define INFL 4000000000000000099LL
ll n,m,a,b,c;
vector<pair<pair<ll,ll>,ll>>v,v2;
ll il[200007];
vector<pair<ll,ll>>kon[200007];
 pair<ll,ll>mx={-1,-1};
bool czy(ll x,ll k){// czy da sie x odwracajc k
    priority_queue<pair<ll,ll>>q;
    ll licz[200007];
    for(ll i=0;i<200007;i++)licz[i]=0;
    ll ak=0;
    vector<pair<ll,ll>>wz;//kon,ile
    for(ll i=0;i<=mx.ss;i++){
        ll co=il[i]-x+(k-il[i]+x+1)/2;
        for(auto j : kon[i]){
            q.push(j);
        }
        while(co>ak){
            if(q.empty())return 0;
            auto j =q.top();
            q.pop();
            if(j.ss+ak>co){
                j.ss-=(co-ak);
                wz.pb({j.ff,co-ak});
                ak=co;
                q.push(j);
            }
            else{
                wz.pb({j.ff,j.ss});
                ak+=j.ss;
            }
        }
    }
    //licz[mx.ss]+=k;
    for(auto i : wz){
       // cout<<i.ff<<" xd "<<i.ss<<"\n";
        licz[i.ff]+=i.ss;
    }
    
    for(ll i=mx.ss+1;i<n;i++){
        licz[i]+=licz[i-1];
       // cout<<licz[i]<<"  "<<il[i]<<"\n";
        if(2*licz[i]-k+il[i]>x){//cout<<"xd";
            return 0;}
    }
    return 1;
}
ll s;
int main()
{
    cin>>n>>m;
    for(ll i=0;i<m;i++){
        cin>>a>>b>>c;
        a%=n;
        b%=n;
        if(a>b)swap(a,b);
      //  cout<<a<<" "<<b<<" "<<c<<"  ";
        il[a]+=c;
        s+=c;
        il[b]-=c;
        v.pb({{a,b},c});
    }
    for(ll i=1;i<n;i++){il[i]+=il[i-1];
      //  cout<<il[i]<<" ";
    }
   
    for(ll i=0;i<n;i++){
        mx=max(mx,{il[i],i});
    }
    swap(v,v2);
    for(auto i : v2){
        if(i.ff.ff<=mx.ss && i.ff.ss>mx.ss){
            v.pb(i);
            kon[i.ff.ff].pb({i.ff.ss,i.ss});
        }
    }
   // cout<<mx.ff<<" "<<mx.ss<<"\n\n";
    for(ll i=0;i<n;i++){
       // cout<<i<<": ";
       // for(auto j : kon[i])cout<<j.ff<<" ";
       // cout<<"\n";
    }
    ll pocz=1;
    ll kon=s;
    while(pocz!=kon){
        ll mid=(pocz+kon)/2;
        //cout<<mid<<"mid "; 
        if(czy(mid,mx.ff-mid) || czy(mid,mx.ff-mid+1))kon=mid;
        else pocz=mid+1;
    }
    cout<<pocz;
}
| # | 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... |