求助
  • 板块P1442 铁球落地
  • 楼主xbb2
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/7/31 10:48
  • 上次更新2023/10/27 17:38:23
查看原帖
求助
174806
xbb2楼主2022/7/31 10:48
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int f[N][4],p[2*N+5],n,h,x,y,cnt;
map<int,int>mp;
struct tree{
	int d[N];
	inline void build(int s,int t,int p){
		if(s==t){return ;}int m=s+((t-s)>>1);
		build(s,m,p*2),build(m+1,t,p*2+1);
		d[p]=(d[p*2]==d[p*2+1])?d[p*2]:-1;
	}
	inline void update(int l,int r,int c,int s,int t,int p){
		if(l<=s&&t<=r){d[p]=c;return ;}int m=s+((t-s)>>1);
		if(l<=m)update(l,r,c,s,m,p*2);
		if(m<r)	update(l,r,c,m+1,t,p*2+1);
		d[p]=(d[p*2]==d[p*2+1])?d[p*2]:-1;
	}
	inline int query(int x,int s,int t,int p){
		if(d[p]!=-1)return d[p];
		if(s==t)return d[p];
		int m=s+((t-s)>>1);
		if(x<=m)return query(x,s,m,p*2);
		else	return query(x,m+1,t,p*2+1);
	}
}T;
struct tip{int h,l,r,l1,r1;}a[N];
bool cmp(tip a,tip b){return a.h<b.h;}
int main(){
	cin>>n>>h>>x>>y;
	for(int i=1;i<=n;i++)scanf("%d%d%d",&a[i].h,&a[i].l,&a[i].r);
	for(int i=1;i<=n;i++)p[i]=a[i].l,p[i+n]=a[i].r;
	p[2*n+1]=x,p[2*n+2]=y;
	sort(p+1,p+1+2*n+2);int len=unique(p+1,p+1+2*n+2)-p-1;
	for(int i=1;i<=len;i++)mp[p[i]]=++cnt;
	T.build(1,cnt,1);x=mp[x],y=mp[y];
	for(int i=1;i<=n;i++)a[i].l1=mp[a[i].l],a[i].r1=mp[a[i].r];
	sort(a+1,a+1+n,cmp);a[0].h=0,a[0].l=a[0].l1=1,a[0].r=a[0].r1=cnt;
	memset(f,0x3f,sizeof(f));f[0][1]=0,f[0][2]=0;
//	for(int i=1;i<=n;i++)printf("%d = h:%d l:%d r:%d l1:%d r1:%d\n",i,a[i].h,a[i].l,a[i].r,a[i].l1,a[i].r1);
	for(int i=1;i<=n;i++){
		int x1=T.query(a[i].l1,1,cnt,1),x2=T.query(a[i].r1,1,cnt,1);
		if(a[i].h-a[x1].h<=h)f[i][1]=min(f[x1][1]+abs(a[i].l-a[x1].l),f[x1][2]+abs(a[i].l-a[x1].r))+a[i].h-a[x1].h;
		if(a[i].h-a[x2].h<=h)f[i][2]=min(f[x2][1]+abs(a[i].r-a[x2].l),f[x2][2]+abs(a[i].r-a[x2].r))+a[i].h-a[x2].h;
		T.update(a[i].l1,a[i].r1,i,1,cnt,1);
//		for(int j=1;j<=cnt;j++)printf("%3d",T.query(j,1,cnt,1));
//		printf("\n");
	}
	int k=T.query(x,1,cnt,1);
	printf("%d",min(f[k][1]+abs(a[k].l1-x),f[k][2]+abs(a[k].r1-x))+y-a[k].h);
	return 0;
}

没过样例2(自己觉得应该是线段树的问题)

求调

2022/7/31 10:48
加载中...