首页 > TAG信息列表 > 影魔

「AHOI / HNOI2017」影魔

「AHOI / HNOI2017」影魔 cdq 分治写法。 首先利用单调栈求出 \(L_i,R_i\) 分别表示在 \(i\) 左边第一个 \(K\) 值大于 \(K_i\),右边第一个 \(K\) 值大于 \(K_i\) 的位置。 如 \(L_i\) 不存在设为 0,如 \(R_i\) 不存在设为 \(n+1\)。 然后我们考虑提供 \(p1\) 攻击力的情况: 容易发现

[AHOI/HNOI2017]影魔 题解

传送门QAQ 思路 首先有一个套路(我自己总结的,错了别骂窝 qwq): 统计满足类似 \(i \lt j \lt k\) 且 \(a_i \lt a_j \lt a_k\) 的关系的 \((i,j,k)\) 数量的这类题一般来说突破点都是中间的 \(j\),并且一般会采用单调栈处理。 这道题的预处理就是这个套路: 首先对于每个 \(i\),求出左边

Luogu 3722 影魔(树状数组区间查询区间修改)(好!!)

P3722 [AH2017/HNOI2017]影魔 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 该如何·思考这一题,一开始发现是蒙蔽的(毫无思路)‘ 首先将题意改成人话:如果l~r中l,r是最大值和次大值,那么会有p1的价值 如果l~r中有一个是最大值,那么有p2的贡献 其实这个题有一个很重要的条件就是k为1-

NOIP 模拟 $14\; \text{影魔}$

题解 \(by\;\;zj\varphi\) 不是原题 一道(对我来说)很需要技巧的题 对于颜色数如何处理 离线,将子树转化为 \(dfs\) 序,但这种做法无法处理深度 我们按照深度加点(可以通过 \(bfs\) 实现),对于加到的每一个点,寻找和它颜色相同的点的 \(dfs\) 序,记录前趋和后继( \(set\) ), 将这个点和前

[AH2017/HNOI2017]影魔 题解(线段树 思维)

[AH2017/HNOI2017]影魔 题解 题意 \(~~~~\) 给出长为 \(n\) 的排列 \(\{k\}\) ,共 \(m\) 次给出 \([a,b]\) ,求: \[\sum_{i=a}^b\sum_{j=i+1}^b [k_i>k_s \land k_j>k_s]\times p_1 +[k_i<k_s<k_j \lor k_i>k_s>s_j]\times p_2 (k_s=\max_{l=i+1}^{j-1}

【题解】[AH2017/HNOI2017]影魔

Problem \(\text{Solution:}\) 对于 p1 的获得条件,要求端点两个值恰好是次大值和最大值;对于 p2 的获得条件,要求其中一个是最大值。 线段树并不一定是用来动态直接回答询问的,这题区间的答案也并不好合并。考虑处理出每一个点左右比他大的第一个数的位置后贡献应该长什么样: 首先 R[i

【题解】 「AHOI / HNOI2017」影魔 线段树+单调栈+扫描线+差分

Legend Link \(\textrm{to LOJ}\)。 Editorial 题意翻译之后就是有两个贡献方式: 区间端点为最大和次大时 \(+p_1\)。 区间端点为最大和非次大时 \(+p_2\)。 手玩一下就感觉这个贡献方式与单调栈出奇地像,不妨就用单调栈的角度来分析这个贡献。 先求出每个区间的贡献是 \(p_1,p_2,

[AH2017/HNOI2017] 影魔 - 线段树

#include<bits/stdc++.h> #define maxn 200010 using namespace std; int a[maxn],st[maxn][2],top,L[maxn],R[maxn],root[2][maxn]; struct node{int x,y;}A[maxn]; struct Node{int x,yl,yr;}B[maxn<<1]; long long num; bool cmp1(node p,node q){return p.x&l

【题解】 [AH2017/HNOI2017]影魔 线段树 luoguP3722/bzoj4826

真心巧妙,不看题解准做不出(之前题解都看不懂QwQ) 这道题貌似有许多的做法,都不费,主席树的话不知道怎么搞,于是建了 $3$ 棵线段树,实测是不会炸的。 30分做法: 小学生都能轻易想出来的解法,对于一个询问的区间,暴力枚举其子区间,然后按照题面的要求算贡献,区间最大值可以用 $ST$ 表预处理,