社区讨论
求卡常喵QAQ
P14827吃吃饱参与者 9已保存回复 19
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 18 条
- 当前快照
- 1 份
- 快照标识符
- @mjfms7ug
- 此快照首次捕获于
- 2025/12/21 19:15 2 个月前
- 此快照最后确认于
- 2025/12/24 14:00 2 个月前
赛事 卡常卡不出来
心态炸了QAQ
CPP#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll N=6e5+10,inf=0x3f3f3f3f3f3f3f;
ll n,q,x0,x,qst[N],qstb[N],a[N][2],b[N][2],dp[N];
ll tung[N],tot;
struct sgt{
sgt *ls,*rs;
ll l,r,mi;
inline sgt(ll lx,ll rx):l(lx),r(rx),mi(inf){
if(l==r){
ls=rs=nullptr;
return;
}
ll mid=(lx+rx)>>1;
ls=new sgt(lx,mid),rs=new sgt(mid+1,rx);
return;
}
inline void push_up(){
mi=min(ls->mi,rs->mi);
return;
}
inline void update(ll x,ll k){
if(l>x||r<x) return;
if(l==r&&l==x){
mi=min(mi,k);
return;
}
if(ls->r>=x) ls->update(x,k);
else rs->update(x,k);
push_up();
return;
}
inline ll querymin(ll x,ll y){
if(l>y||r<x) return inf;
if(l>=x&&r<=y) return mi;
return min(ls->querymin(x,y),rs->querymin(x,y));
}
};
int main(){
ios::sync_with_stdio(0),cin.tie(0);
cin>>n>>q>>x0;
for(int i=1;i<=n;i++){
cin>>a[i][0]>>a[i][1];
tung[++tot]=a[i][0];
tung[++tot]=a[i][1];
}
for(int i=1;i<=q;i++) cin>>qst[i],tung[++tot]=qst[i];
sort(tung+1,tung+1+tot);
tot=unique(tung+1,tung+1+tot)-tung-1;
for(int i=1;i<=n;i++){
b[i][0]=lower_bound(tung+1,tung+1+tot,a[i][0])-tung;
b[i][1]=lower_bound(tung+1,tung+1+tot,a[i][1])-tung;
}
for(int i=1;i<=q;i++) qstb[i]=lower_bound(tung+1,tung+1+tot,qst[i])-tung;
auto left=new sgt(1,tot);
auto right=new sgt(1,tot);
for(int i=1;i<=n;i++){
dp[i]=min(abs(x0-a[i][0]),abs(x0-a[i][1]));
ll op=a[i][0]+left->querymin(1,b[i][0]);
op=min(op,right->querymin(b[i][0],tot)-a[i][0]);
op=min(op,a[i][1]+left->querymin(1,b[i][1]));
op=min(op,right->querymin(b[i][1],tot)-a[i][1]);
dp[i]=min(dp[i],op);
left->update(b[i][0],dp[i]-a[i][0]);
left->update(b[i][1],dp[i]-a[i][1]);
right->update(b[i][0],dp[i]+a[i][0]);
right->update(b[i][1],dp[i]+a[i][1]);
}
for(int i=1;i<=q;i++){
ll ans=abs(x0-qst[i]);
ll op=qst[i]+left->querymin(1,qstb[i]);
op=min(op,right->querymin(qstb[i],tot)-qst[i]);
ans=min(ans,op);
cout<<ans+n-1<<'\n';
}
return 0;
}
回复
共 19 条回复,欢迎继续交流。
正在加载回复...