当前位置: 首页 > news >正文

Solution - P5471 [NOI2019] 弹跳

本题卡空间。

线段树优化建图。但是我们不能显式建图甚至是显式建出二维线段树不然会 MLE。

于是我们使用线段树套 set 来做这个题,第一位用线段树第二位用 set 直接查。

然后注意到点权图最短路第一次松弛即为最优,于是我们把矩形建出虚点然后 dijkstra,复杂度做到了 \(\mathrm{O}(n \log^2 n)\)\(n, m\) 视为同阶)。

然后卡卡空间就过了。

#include <bits/stdc++.h>
#define llong long long
#define N 250005
using namespace std;#define bs (1<<20)
char buf[bs], *p1, *p2;
#define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,bs,stdin),p1==p2)?EOF:*p1++)
template<typename T>
inline void read(T& x){x = 0; int w = 1;char ch = gc();while(ch < '0' || ch > '9'){if(ch == '-') w = -w;ch = gc();}while(ch >= '0' && ch <= '9')x = (x<<3)+(x<<1)+(ch^48), ch = gc();x *= w;
}
template<typename T, typename ...Args>
inline void read(T& x, Args& ...y){return read(x), read(y...);
}#define x1 test1
#define y1 test2int n, m, w, h;
int x[N], y[N];
int x1[N], y1[N], x2[N], y2[N]; int c[N];
vector<int> op[N];typedef pair<int, int> Node;
set<Node> val[N<<2];
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
#define mid ((l+r)>>1)inline void modify(int posx, int posy, int id, int x = 1, int l = 1, int r = n){val[x].emplace(posy, id);if(l == r) return;if(posx <= mid) modify(posx, posy, id, ls(x), l, mid  );else            modify(posx, posy, id, rs(x), mid+1, r);return;
}int vis[N], dis[N];
priority_queue<Node, vector<Node>, greater<Node> > pq;
inline void operate(int u, int x = 1, int l = 1, int r = n){if(x1[u] <= l && x2[u] >= r){auto it = val[x].lower_bound({y1[u], 0});while(it != val[x].end() && it->first <= y2[u]){int v = it->second;if(vis[v]) goto del;if(dis[v] > dis[u+n]){dis[v] = dis[u+n];vis[v] = true;pq.emplace(dis[v], v);}del:;auto tmp = it++;val[x].erase(tmp);}return;}if(x1[u] <= mid) operate(u, ls(x), l, mid  );if(x2[u] >  mid) operate(u, rs(x), mid+1, r);return;
}
inline void dijkstra(){for(int i = 1; i <= n+m; ++i)dis[i] = 1e9+7;dis[1] = 0, vis[1] = true;pq.emplace(0, 1);while(pq.size()){int u = pq.top().second; pq.pop();if(u <= n){for(int v : op[u]){dis[v+n] = dis[u]+c[v], vis[v+n] = true;pq.emplace(dis[v+n], v+n);}}else operate(u-n);}
}int main(){// freopen("in.txt", "r", stdin);read(n, m, w, h);for(int i = 1; i <= n; ++i)read(x[i], y[i]), modify(x[i], y[i], i);for(int i = 1, x; i <= m; ++i){read(x, c[i], x1[i], x2[i], y1[i], y2[i]);op[x].push_back(i);}dijkstra();for(int i = 2; i <= n; ++i)printf("%d\n", dis[i]);return 0;
}
http://www.jsqmd.com/news/363024/

相关文章:

  • Excel条件格式高级应用:动态图标集标记成绩与平均分比较
  • 防冻液优质厂家推荐及选购指南 - 优质品牌商家
  • [python]-LangChain
  • Java毕设项目推荐-基于Spring Boot的社区便民服务管理系统的设计与实现基于springboot的在线社区系统的设计与开发【附源码+文档,调试定制服务】
  • 数字模型赋能大规模设计,连通城市与河流
  • 铁木辛柯梁振动分析仿真 COMSOL案例还原及 此模型研究深梁的自由振动和强迫振动
  • [Informatics] (Legacy) CodeForces + Atcoder 问题几则
  • 成都美术艺考集训机构优质推荐榜:美术艺考校考培训机构/美术艺考集训培训机构/美术艺考集训学校/专业美术艺考培训/选择指南 - 优质品牌商家
  • Java毕设选题推荐:基于springboot的在线社区系统的设计与开发基于Spring Boot的社区便民服务管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 技术项目招人难、用人贵?唐普 IT 人力外包,帮企业破解人力卡点难题
  • BeeWorks企业通讯:赋能企业高效沟通,守护安全协同新生态
  • WordPress定制开发自动化测试最佳实践
  • 深入理解Redis哨兵(Sentinel)原理:高可用架构的核心守护者
  • 南昌瓷砖卫浴专业商家推荐榜:南昌卫浴浴室柜、南昌卫浴浴缸、南昌卫浴淋浴房、南昌卫浴花洒、南昌卫浴马桶、南昌卫浴龙头选择指南 - 优质品牌商家
  • 字节这款新AI让导演都慌了!Seedance2.0凭什么能自动剪大片?
  • 计算机Java毕设实战-基于springboot的在线社区系统的设计与开发基于SpringBoot的社区居民服务系统的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 工厂产品良率低怎么办?关键在于制造过程
  • 代码是如何变成可执行文件的?
  • 深入解析:【C++】递归与迭代:两种编程范式的对比与实践
  • Ruby 模块(Module)
  • Day38-20260209
  • Memcached incr/decr 命令详解
  • 10.1 重大发现!消息可靠传输原来是这样保证的?
  • winget坏了修复
  • 在算法的茧房中悬鉴:养护人叙事环与“悟空悖论”的超越
  • 成都诚信艺考美术集训机构优质推荐 - 优质品牌商家
  • 三亚平价海鲜必看!2026年度高性价比湘菜排行榜推荐
  • 9.1 WebSocket网关架构设计竟然可以这样做?
  • 2026别墅电梯优质厂家推荐榜 - 优质品牌商家
  • 折叠面板(Accordion)