P14575 坤班 题解
1. 题意解释
我懒,自己看题干去吧。
2. 思路
不难发现答案具有单调性,考虑二分答案。
考虑对于某个答案
我们预处理出对于某种学科
然后我们考虑每个老师
可以发现这样的策略一定是不劣的,于是就做完了。
3. 代码实现
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[500500],b[500500],c[500500],sum[500500],tmp[500500],minn=1e18,cnt,ans;
bool check(int x){
int res=0;
for(int i=1;i<=m;i++){
tmp[i]=sum[i];
}
for(int i=1;i<=n;i++){
if(tmp[a[i]]>x&&b[i]>=1&&c[i]==1){
res++;
tmp[a[i]]--;
}
}
if(res>=x){
return true;
}
return false;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i]>>c[i];
sum[a[i]]+=b[i];
cnt+=c[i];
}
for(int i=1;i<=m;i++){
minn=min(minn,sum[i]);
}
minn=min(minn,cnt);
int l=0,r=minn;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid)){
ans=mid;
l=mid+1;
}
else{
r=mid-1;
}
}
cout<<ans;
return 0;
}