首页 > 其他分享 >「NOIP 模拟赛 20230706」轨道飞跃

「NOIP 模拟赛 20230706」轨道飞跃

时间:2023-07-06 19:37:35浏览次数:56  
标签:pre 20230706 LGN NOIP int fi 飞跃 se define

summarization

solution

考虑倒着走,那么从 \(u\) 走到 \(v\) 条件就变为 \(r_v\) 在 \(u\) 所在的区间内,于是我们预处理出右端点在这段区间内的轨道的左端点的最小值(可以用 ST 表),然后从 \(t\) 跳回 \(s\)。

不难发下,往回跳的过程可以用倍增优化(具体见代码),最终复杂度 \(\mathcal{O}(n\log n)\)。

code

#define pii pair<int,int>
#define fi first
#define se second
#define mk make_pair
CI N = 1e5, LGN = 20, INF = 0x7fffffff; int n, m; pii a[N + 5], RMQ[N + 5][LGN + 5]; int lsh[N + 5], pre[N + 5][LGN + 5], lg[N * 2 + 5];
int main () {
	RI i, j; for (Read (n, m), i = 1; i <= n; ++ i) Read (a[i].fi, a[i].se), lsh[i] = a[i].se; sort (lsh + 1, lsh + n + 1);
	int cnt = unique (lsh + 1, lsh + n + 1) - lsh - 1; for (i = 1; i <= n; ++ i) RMQ[i][0] = mk (INF, -1); 
	for (i = 1; i <= n; ++ i) {int emm = lower_bound (lsh + 1, lsh + cnt + 1, a[i].se) - lsh; RMQ[emm][0] = min (RMQ[emm][0], mk (a[i].fi, i));}
	for (j = 1; j <= LGN; ++ j) for (i = 1; i <= n - (1 << j) + 1; ++ i) RMQ[i][j] = min (RMQ[i][j - 1], RMQ[i + (1 << (j - 1))][j - 1]);
	for (i = 2; i <= n * 2; ++ i) lg[i] = lg[i >> 1] + 1; for (i = 1; i <= n; ++ i) {
		int l = lower_bound (lsh + 1, lsh + cnt + 1, a[i].fi) - lsh, r = lower_bound (lsh + 1, lsh + cnt + 1, a[i].se) - lsh;
		int k = lg[r - l + 1]; pre[i][0] = min (RMQ[l][k], RMQ[r - (1 << k) + 1][k]).se;
	} for (j = 1; j <= LGN; ++ j) for (i = 1; i <= n; ++ i) pre[i][j] = pre[pre[i][j - 1]][j - 1]; W (m --) {
		int x, y; Read (x, y); if (x == y || (a[y].fi <= a[x].se && a[x].se <= a[y].se)) {printf ("%d\n", x != y); continue;} int num = 0;
		for (i = LGN; i >= 0; -- i) if (a[x].se < a[pre[y][i]].fi) num += 1 << i, y = pre[y][i]; y = pre[y][0]; ++ num;
		if (a[x].se < a[y].fi || a[x].se > a[y].se) printf ("impossible\n"); else printf ("%d\n", num + (a[x].se >= a[y].fi));
	}
	return 0; 
}

标签:pre,20230706,LGN,NOIP,int,fi,飞跃,se,define
From: https://www.cnblogs.com/ClapEcho233/p/17533116.html

相关文章

  • 20230706巴蜀暑期集训测试总结
    T1我是个大聪明!一眼矩乘。构造转移矩阵构造了3.5h!最开始以为只有\(15\times15\),直接手打。写到一半发现不一定四种颜色都有,是\(52\times52\)的,这时候狗被脑子吃了,还想手打,于是就打到了3h。差不多打了一大半,脑子终于把狗还回来了,意识到就算打完也不可能调得出来,就开始另辟蹊径,......
  • 「NOIP 模拟赛 20230705」序列删数问题
    summarizationsolution首先发现,范围小的工具在删除某一数字时将更大数字包括进来的可能性越小,可以删除的数更多,所以在删除某一数字时应该尽可能选择范围较大的工具。接下来我们考虑可删数(要删除的数)删除的顺序:考虑要删掉每个数所允许的最大的工具的区间长度。现在假设有两个......
  • 「NOIP 模拟赛 20230706」偷 WiFi
    summarization有一个长度为\(n\)的序列\(p\),将其中若干个数标记。对于序列中的每一个位置\(i\),其贡献为其左边与右边离它最近的被标记的数的数值的和。求出最大的贡献总和。(\(1\len\le2\times10^6\))solution首先显然,\(p_1,p_n\)一定要标记。然后考虑分别求相邻的标记数......
  • 「NOIP 模拟赛 20230705」T2-序列删数问题 题解
    题面Natsuzora有一个长度为\(n\)的排列\(a_1,a_2,\ldots,a_n\),他想要将序列中的\(m\)个数删除。删除数字需要使用到“魔法工具”,其也有\(m\)种,其中第\(i\)种魔法工具能够将排列中任意一个的长度为\(l_i\)的区间中最大的数删除。每个魔法工具最多只能使用\(1\)次。......
  • [NOIP2012 普及组] 寻宝
    思路:模拟必须mod20123,不然就有可能会爆掉!AC代码#include<iostream>#defineintlonglongusingnamespacestd;boolwhether[10001][101];ints[10001][101],T[10001];signedmain(){ intn,m,S,w,ans=0; cin>>n>>m; for(inti=0;i<n;i++) { for(intj=......
  • NOIP 模拟赛 2023.07.04 题解--zhengjun
    linkT1转化为\((b_i,a_i)\)与\((b_j,a_j)\)之间的斜率。发现性质(省略),只需要计算相邻两个点之间的答案即可,用set就行了。T2先找性质,发现即为\(a,b,c\)各有某一位是“独特”(即其他两个数这一位与之不一样)的。直接\(O(8^2n)\)记录各个状态,预处理转移优化一下即可。T......
  • P1025 [NOIP2001 提高组] 数的划分
    https://www.luogu.com.cn/problem/P1025#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>usingnamespacestd;constintN=10;intn,k;intans;intst[N];voiddfs(intlast,intleft,intstep)//利用last来......
  • [NOIP2006 普及组] 开心的金明
    该s的背包[NOIP2006普及组]开心的金明题目描述金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过\(N\)元钱就行”。今天一早金明就开始做预算,但是他想买的......
  • [NOIP2015 提高组] 跳石头
    [NOIP2015提高组]跳石头题目背景一年一度的“跳石头”比赛又要开始了!题目描述这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有\(N\)块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从......
  • [NOIP2001 提高组] 一元三次方程求解
    [NOIP2001提高组]一元三次方程求解题目描述有形如:\(ax^3+bx^2+cx+d=0\)这样的一个一元三次方程。给出该方程中各项的系数(\(a,b,c,d\)均为实数),并约定该方程存在三个不同实根(根的范围在\(-100\)至\(100\)之间),且根与根之差的绝对值\(\ge1\)。要求由小到大依......