This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std ;
const int MAX = 1e5 + 10 ;
int L[MAX] , R[MAX] , C[MAX] ;
int n , m ;
vector< pair<int , int> >vp ;
bool cmp(pair<int , int>&a , pair<int , int>&b)
{
if(a.second != b.second)
return a.second > b.second ;
else
return a.first < b.first ;
}
int cnt[MAX] ;
void Apply(pair<int , int>p)
{
for(int i = 1 ; i <= n ; ++i)
{
if(i < p.first || i >= p.second)
{
if(cnt[i] <= 0)
return ;
}
}
for(int i = 1 ; i <= n ; ++i)
{
if(i < p.first || i >= p.second)
cnt[i]-- ;
else
cnt[i]++ ;
}
}
bool check(int k)
{
for(int i = 1 ; i <= n ; ++i)
cnt[i] = k ;
for(auto &p : vp)
{
for(int i = p.first ; i < p.second ; ++i)
cnt[i]-- ;
}
bool flag = true ;
for(int i = 1 ; i <= n ; ++i)
flag &= (cnt[i] >= 0) ;
if(flag)
return true ;
for(auto &p : vp)
Apply(p) ;
flag = true ;
for(int i = 1 ; i <= n ; ++i)
flag &= (cnt[i] >= 0) ;
return flag ;
}
int main()
{
ios_base::sync_with_stdio(0) ;
cin.tie(0) ;
cin>>n>>m ;
for(int i = 0 ; i < m ; ++i)
{
cin>>L[i]>>R[i]>>C[i] ;
if(R[i] < L[i])
swap(L[i] , R[i]) ;
vp.emplace_back(L[i] , R[i]) ;
}
sort(vp.begin() , vp.end() , cmp) ;
int l = 1 , r = m ;
int ans = r ;
while(l <= r)
{
int mid = (l + r) >> 1 ;
if(check(mid))
ans = mid , r = mid-1 ;
else
l = mid+1 ;
}
return cout<<ans<<"\n" , 0 ;
}
# | 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... |