社区讨论
李超树疑似被卡常80pts求助
P4655[CEOI 2017] Building Bridges参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mkqrspp4
- 此快照首次捕获于
- 2026/01/23 19:01 4 周前
- 此快照最后确认于
- 2026/01/24 09:36 4 周前
CPP
#include<bits/stdc++.h>
#define mid ((l+r)>>1)
using namespace std;
typedef long long ll;
const ll N=1e5+5;
ll n,tot,h[N],w[N],dp[N];
int rt,ls[N<<3],rs[N<<3];
struct Node{
ll k,b;
ll cal(ll x){return k*x+b;}
} t[N<<3];
void up(int &id,int l,int r,Node p){
if(!id) return id=++tot,t[id]=p,void();
if(p.cal(mid)>t[id].cal(mid)) swap(t[id],p);
if(p.k>t[id].k) up(rs[id],mid+1,r,p);
else up(ls[id],l,mid,p);
}
ll qry(int id,int l,int r,int x){
if(!id) return -1e18;
if(x<=mid) return max(t[id].cal(x),qry(ls[id],l,mid,x));
return max(t[id].cal(x),qry(rs[id],mid+1,r,x));
}
int main(){
ios::sync_with_stdio(0);
cin>>n;
for(ll i=1;i<=n;i++) cin>>h[i];
for(ll i=1;i<=n;i++) cin>>w[i],w[i]+=w[i-1];
dp[1]=0;
for(ll i=2;i<=n;i++){
dp[i]=1e18;up(rt,0,1e6,{2*h[i-1],-h[i-1]*h[i-1]+w[i-1]-dp[i-1]});
dp[i]=w[i-1]+h[i]*h[i]-qry(rt,0,1e6,h[i]);
}
cout<<dp[n];
return 0;
}
死活TLE on 17,18,不知道是什么问题,我记得 李超都能过啊
回复
共 3 条回复,欢迎继续交流。
正在加载回复...