ToB企服应用市场:ToB评测及商务社交产业平台

标题: P1081 [NOIP2012 进步组] 开车观光 [打印本页]

作者: 一给    时间: 2024-7-30 08:13
标题: P1081 [NOIP2012 进步组] 开车观光
思绪:

首先令 \(nxt1_i\) 表示右侧最近的城市间隔(\(id1_i\) 为编号),令 \(nxt2_i\) 表示右侧第二近的城市编号(\(id2_i\) 为编号);可以利用 set 找出离这个城市最近的 \(4\) 个城市(前面两个,后面两个)。
定义:
初始化:

\[f_{i,0} = id1_{id2_i}\]

\[dp1_{i,0} = nxt2_{i}\]

\[dp2_{i,0} = nxt1_{id2_i}\]
状态转移方程为:

\[f_{i,j} = f_{f_{i,j-1},j-1}\]

\[dp1_{i,j} = dp1_{i,j-1} + dp1_{f_{i,j-1},j-1}\]

\[dp2_{i,j} = dp2_{i,j-1} + dp2_{f_{i,j-1},j-1}\]
此时对于询问 \(1\) 和询问 \(2\):
时间复杂度为 \(O((N+Q) \log N)\)。
完整代码:

[code]#include#define Add(x,y) (x+y>=mod)?(x+y-mod)x+y)#define lowbit(x) x&(-x)#define pi pair#define pii pair#define iip pair#define ppii pair#define fi first#define se second#define full(l,r,x) for(auto it=l;it!=r;it++) (*it)=x#define Full(a) memset(a,0,sizeof(a))#define open(s1,s2) freopen(s1,"r",stdin),freopen(s2,"w",stdout);using namespace std;typedef double db;typedef unsigned long long ull;typedef long long ll;bool Begin;const ll N=1e5+10,M=18,INF=1e18;inline ll read(){    ll x=0,f=1;    char c=getchar();    while(c'9'){        if(c=='-')          f=-1;        c=getchar();    }    while(c>='0'&&c




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4