abc298-F
题目链接:https://atcoder.jp/contests/abc298/submissions/40704498
思路:先离散化,再暴力二重循环枚举每一行每一列,但一定要加个优化,当
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
typedef pair<long long,int>P;
vector<int>num;
int A[N],B[N],V[N];
P RR[N],CC[N];
map<int,long long>R,C;
map<P,int>M;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
for (int i=1;i<=n;i++){
int a,b,c;
cin>>a>>b>>c;
A[i] = a,B[i] = b,V[i] = c;
num.push_back(a),num.push_back(b);
}
sort(num.begin(),num.end());
num.erase(unique(num.begin(),num.end()),num.end());
for (int i=1;i<=n;i++){
int X = lower_bound(num.begin(),num.end(),A[i])-num.begin()+1;
int Y = lower_bound(num.begin(),num.end(),B[i])-num.begin()+1;
R[X] += V[i],C[Y] += V[i];
M[{X,Y}] = V[i];
}
long long mx = 0;
int cntr = 0,cntc = 0;
for (auto r:R) RR[++cntr] = {r.second,r.first};
for (auto c:C) CC[++cntc] = {c.second,c.first};
sort(RR+1,RR+1+cntr);
sort(CC+1,CC+1+cntc);
for (int i=cntr;i>=1;i--){
for (int j=cntc;j>=1;j--){
if (mx>=RR[i].first+CC[j].first) break;
else{
if (M.count({RR[i].second,CC[j].second})){
mx = max(mx,RR[i].first+CC[j].first-M[{RR[i].second,CC[j].second}]);
}else{
mx = max(mx,RR[i].first+CC[j].first);
}
}
}
}
cout<<mx;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧