尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Atcoder 437 总结+E-F题解

Atcoder 437 总结+E-F题解
📅 发布时间:2026/6/19 20:08:49

总结

A,B,C,D,E

考试时很快打出了正解,没什么问题。

F

没什么思路,下来发现了一种比较神奇的做法。

题解

E

会发现,每一层我们会将相同的数字以及他的儿子同时去遍历。因为它们有着相同的前缀,所以说字典序只在目前这个位置出现差异。

每一次我们用一个vector记录我们当前正在遍历哪些父亲,然后去看它的儿子又有哪些是相同的,然后再加相同的放进去去往下递归即可。

代码

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f3f3f3f3f
#define int long long
#define endl '\n'
using namespace std;
const int maxn=3e5+5;
int ans[maxn],cnt;
vector<int> s;
set<pair<int,int> > g[maxn];
void dfs()
{vector<pair<int,int> > v;for(auto x:s){for(auto [w,to]:g[x]) v.push_back({w,to});}s.clear();sort(v.begin(),v.end());for(int i=0;i<v.size();i++){ans[cnt++]=v[i].second;s.push_back(v[i].second);while(i<v.size()-1&&v[i+1].first==v[i].first) i++,s.push_back(v[i].second),ans[cnt++]=v[i].second;dfs();s.clear();}
}
signed main()
{ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int n;cin>>n;for(int i=1;i<=n;i++){int x,y;cin>>x>>y;g[x].insert({y,i});}s.push_back(0);ans[++cnt]=0;dfs();for(int i=1;i<=n;i++) cout<<ans[i]<<' ';return 0;
}

F

我们先把曼哈顿距离的式子写出来。

\[|X-x_i|+|Y-y_i| \]

那么此时我们就会发现我们将绝对值展开后得。

\[X+Y-(x_i+y_i)\\ x_i+y_i-(X+Y)\\ X-Y-(x_i-y_i)\\ x_i-y_i-(X-Y) \]

我们只需要将两个加起来的最大值最小值两个减掉的最小值最大值都用线段树维护出来即可。

代码

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f3f3f3f3f
#define int long long
#define endl '\n'
using namespace std;
const int maxn=2e5+5;
int x[maxn],y[maxn];
struct SGT
{int maxx[maxn<<2],minn[maxn<<2];void pushup(int x){maxx[x]=max(maxx[x*2],maxx[x*2+1]);minn[x]=min(minn[x*2],minn[x*2+1]);}void update(int x,int l,int r,int p,int v){if(l==r){maxx[x]=minn[x]=v;return;}int mid=(l+r)>>1;if(p<=mid) update(x*2,l,mid,p,v);else update(x*2+1,mid+1,r,p,v);pushup(x);}int querymax(int x,int l,int r,int lt,int rt){if(l>=lt&&r<=rt) return maxx[x];int mid=(l+r)>>1,a=0,b=0;if(lt<=mid) a=querymax(x*2,l,mid,lt,rt);if(rt>mid) b=querymax(x*2+1,mid+1,r,lt,rt);return max({a,b});}int querymin(int x,int l,int r,int lt,int rt){if(l>=lt&&r<=rt) return minn[x];int mid=(l+r)>>1,a=inf,b=inf;if(lt<=mid) a=querymin(x*2,l,mid,lt,rt);if(rt>mid) b=querymin(x*2+1,mid+1,r,lt,rt);return min({a,b});}
}trees,treed;
signed main()
{ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);int n,q;cin>>n>>q;for(int i=1;i<=n;i++){cin>>x[i]>>y[i];trees.update(1,1,n,i,x[i]+y[i]);treed.update(1,1,n,i,x[i]-y[i]);}while(q--){int op;cin>>op;if(op==1){int i,x,y;cin>>i>>x>>y;trees.update(1,1,n,i,x+y);treed.update(1,1,n,i,x-y);}else{int l,r,x,y;cin>>l>>r>>x>>y;int a=trees.querymax(1,1,n,l,r)-(x+y);int b=(x+y)-trees.querymin(1,1,n,l,r);int c=treed.querymax(1,1,n,l,r)-(x-y);int d=(x-y)-treed.querymin(1,1,n,l,r);cout<<max({a,b,c,d})<<endl;}}return 0;
}

本文来自博客园,作者:Engle_Chen,欢迎转载,转载请注明原文链接:https://www.cnblogs.com/EagleChenzhilong/p/19379397

,感谢阅读!

相关新闻

  • 研究生必备6款免费AI论文生成器:1天搞定综述+真实文献引用
  • Open-AutoGLM参会指南:如何最大化获取AI大模型最新实战经验
  • 图论专题(二十三):并查集的“数据清洗”——解决艰难的「账户合并」

最新新闻

  • 10分钟完成黑苹果配置:OpCore-Simplify让复杂变简单的智能解决方案
  • 如何快速集成PingFangSC字体:跨平台中文字体终极指南
  • 气管吸吊机|自动化生产线纸箱专用真空搬运、无损堆垛省力设备解决方案
  • Windows老游戏终极兼容解决方案:dxwrapper完全指南
  • 编写自定义脚本来自动化 vLLM 部署流程
  • 宣城市宁国吃正宗皖南徽菜 + 宁国农家土菜推荐去哪家? - 速递信息

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号