p5471 [NOI2019]弹跳
2024-08-31 10:19:40
分析
代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
const int N = 7e4+;
const int M = 2e5;
int n,m,w,h,x[N],y[N],p[M],t[M],L[M],R[M],D[M],U[M];
int head[N],nxt[M],cnt,dis[N],vis[N];
multiset<pair<int,int> >d[M*];
priority_queue<pair<int,int> >q;
inline void update(int le,int ri,int wh,int pl,int id){
d[wh].insert(mp(y[id],id));
if(le==ri)return;
int mid=(le+ri)>>;
if(mid>=pl)update(le,mid,wh<<,pl,id);
else update(mid+,ri,wh<<|,pl,id);
}
inline void go(int le,int ri,int wh,int id,int k){
if(le>=L[id]&&ri<=R[id]){
multiset<pair<int,int> >::iterator it,a;
it=d[wh].lower_bound(mp(D[id],));
while((it!=d[wh].end())&&(it->fi<=U[id])){
int x=it->se;
if(!vis[x]){
vis[x]=,dis[x]=k;
for(int i=head[x];i;i=nxt[i])q.push(mp(-k-t[i],i));
}
a=it,it++,d[wh].erase(a);
}
return;
}
int mid=(le+ri)>>;
if(mid>=L[id])go(le,mid,wh<<,id,k);
if(mid<R[id])go(mid+,ri,wh<<|,id,k);
return;
}
int main(){
int i,j,k;
scanf("%d%d%d%d",&n,&m,&w,&h);
for(i=;i<=n;i++){
scanf("%d%d",&x[i],&y[i]);
update(,w,,x[i],i);
}
for(i=;i<=m;i++){
scanf("%d%d%d%d%d%d",&p[i],&t[i],&L[i],&R[i],&D[i],&U[i]);
nxt[i]=head[p[i]];head[p[i]]=i;
}
vis[]=;
for(i=head[];i;i=nxt[i])q.push(mp(-t[i],i));
while(!q.empty()){
int u=q.top().se,v=-q.top().fi;
q.pop();go(,w,,u,v);
}
for(i=;i<=n;i++)printf("%d\n",dis[i]);
return ;
}
最新文章
- [转]ubuntu linux下DNS重启后丢失
- EF循环迭代导致如此严重的性能丢失,你知道?
- FireMonkey 保存图片到JPG的方法 BMP转JPG
- react native改变app的图标和名称
- PeCheck
- iOS:后台定位并实时向服务器发送位置
- 无法运行maven项目
- 怎么创建MongoDB数据库
- JavaAPI之Runtime类以及bat文件开启应用程序
- R 语言开发环境搭建
- #tensorflow入门(1)
- Nginx 调优经验记录
- Java读取文件存储到mysql
- ROS学习笔记(一) : 入门之基本概念
- A+B大数运算
- 构造代码块、this关键字、静态变量、静态代码块、主函数
- a,abbr,address,area,article, aside, audio标签文档
- node.js中通过stream模块实现自定义流
- 006_netstat中state详解
- Java反射-修改String常量