首页 > 其他分享 >luogu P3203 [HNOI2010] 弹飞绵羊 题解

luogu P3203 [HNOI2010] 弹飞绵羊 题解

时间:2023-07-25 10:55:26浏览次数:38  
标签:fir int 题解 luogu bl cin bk -- 弹飞

题目传送门:P3203 [HNOI2010] 弹飞绵羊

题意

\(n\) 个数,满足 \(i < a_i ≤ N + 1\) , \(m\) 次下面两种操作

  1. 修改一个数 \(a_i\)
  2. 从 \(x\) 开始跳, \(x = a_x\), 几次能够跳出序列

\(n \leq 2 * 10^5,m < 10^5\)

分析

数据范围比较大,单纯搜索模拟肯定会T,那么考虑每次让他跳一段就停止,然后把每一段跳的次数加起来就是答案;修改也简单,直接在这一段里面使用暴力就行。

题解

可以是LCT板子题,但是还没学LCT,本次采用分块思想:

  • \(f_i\) 表示从 \(i\) 跳几次可以跳到下一个块中,\(to_i\) 表示从 \(i\) 跳到下一个块的位置,\(fir_i\) 记录每个块的开头
  • 修改和查询的时间复杂度均为 \(O(\sqrt n)\)

AC代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 10;
int k[N], bk[N], fir[N];
int n, m;
int f[N], to[N];

inline void rep(int p, int w) {
    k[p] = w;
    for(int i = fir[bk[p] + 1] - 1; i >= fir[bk[p]]; --i) {
        if(i + k[i] >= fir[bk[i] + 1]) {
            f[i] = 1;
            to[i] = i + k[i];
        } else {
            f[i] = f[i + k[i]] + 1;
            to[i] = to[i + k[i]];
        }
    }
}

inline void query(int p) {
    int ans = 0;
    while(p <= n) {
        ans += f[p];
        p = to[p];
    }
    std::cout << ans << endl;
}

inline void solve() {
    std::cin >> n;
    int bl = sqrt(n);
    for(int i = 1; i <= n; ++i) {
        std::cin >> k[i];
        bk[i] = i % bl == 0 ? i / bl : i / bl + 1;
        if(bk[i] != bk[i - 1]) fir[bk[i]] = i;
    }
    fir[n + 1] = n + 1;
    for(int i = n; i >= 1; --i) {
        if(i + k[i] >= fir[bk[i] + 1]) {
            f[i] = 1;
            to[i] = i + k[i];
        } else {
            f[i] = f[i + k[i]] + 1;
            to[i] = to[i + k[i]];
        }

    }
    std::cin >> m;
    while(m --) {
        int t, p, w;
        std::cin >> t;
        if(t == 1) {
            cin >> p;
            query(p + 1);
        } else {
            cin >> p >> w;
            rep(p + 1, w);
        }
    }
    return;
}

signed main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int T;
    T = 1;
    while(T --) {
        solve();
    }
    return 0;
}

标签:fir,int,题解,luogu,bl,cin,bk,--,弹飞
From: https://www.cnblogs.com/marti88414/p/17579204.html

相关文章

  • 题解 P7971【[KSN2021] Colouring Balls】
    postedon2022-10-0819:07:28|under题解|sourceproblem交互库有一个长为\(n\)的颜色序列,你可以询问区间\([l,r]\)中有多少种颜色,最后还原交互库手中的序列,只需要保持相对顺序不变。\(n\leq10^3\),最多询问次数\(Q=2000\)或\(Q=10^4\)。solution令\(C\)为\([1......
  • CF1051G Distinctification题解
    link首先可以发现,题目给定的两种操作为我们提供了“反悔机制”,所以有:结论\(1\):即任何一个可以到达的局面都能到达最优解。利用这个结论,首先我们先去重。继续提炼性质,与相差不到\(1\)的数为基准\(+1\)与\(-1\)操作,将这个数的变化范围限制在了一个区间,并且这个区间的数能......
  • 题解 Codeforces Round 887 (Div 1+Div 2) / CF1853AB,CF1852ABCD
    下大分!悲!Div1只过了1A!!!但还是补完整场Div2吧。A.Desortinghttps://codeforces.com/problemset/problem/1853/Aproblem用操作:\([1,i]++,[i+1,n]--\),使得数组不单调不降,求最小操作次数。\(n\leq10^5\)。solution操作等同于在差分数组上选出\(i\),做\(c_1:=c_1+1,c_i:......
  • UOJ #284. 快乐游戏鸡题解(长链剖分+单调栈合并)
    UOJ#284.快乐游戏鸡题解(长链剖分+单调栈合并)题面一番战斗之后,程序猿被计算鸡们赶走了。随着垫子计算鸡一声令下:“追!”,于是计算鸡村全村上下开始乘胜追击。计算鸡们希望在新的一年到来之际给程序猿以重创,出掉这一年的恶气。可是程序猿一追就走,一走就跑,一跑就无影无踪。计算鸡......
  • 洛谷CF1738C题解
    好一道博弈论水题题目传送门更好的食用体验题目大意:给定长度为$n$的数列$a_1,a_2,\dots,a_n$,两名玩家Alice、Bob依次以最优策略从数列中取走一个数,Alice先取,直至为空博弈结束。若Alice取走的所有数之和为偶,Alice胜利;若Alice取走的所有数之和为奇,Bob胜利......
  • 【题解】Imbalanced Arrays - Codeforces 1852B
    出处:CodeforcesRound887链接:https://codeforces.com/problemset/problem/1852/B题目大意:给定一个包含\(n\)个非负整数的频次序列\(f\)。构造任意一个等长的整数序列\(b\),要求①\(b\in[-n,n]\)but$b\neq0$②\(b\)中不存在相反数③对于每个坐标\(i\)......
  • 【P8302 题解】
    Solution设\(g(x)\)表示\(x\)的最小质因子。则\(f(x)=n+\dfrac{n}{g(x)}=\dfrac{g(x)+1}{g(x)}\timesn\)。分情况讨论:\(g(x)=2\),经过\(1\)次变换之后,\(f(x)\)增加了一个因子\(3\),减少了一个因子\(2\)。\(g(x)>2\),则满足\(g(x)\nmid2\),否则与最小质因子矛盾,......
  • 【题解】Ntarsis' Set - Codeforces 1852A
    出处:CodeforcesRound887链接:https://codeforces.com/problemset/problem/1852/A题目大意:给定一个包含\(n\)个正整数的表示删除位置的严格升序序列\(p\),以及另外一个连续正整数的被删除的无穷序列\(l\)。进行\(k\)次删除操作,每次操作从无穷序列\(l\)中同时删除位......
  • Codeforces Round 887 (Div. 1) 题解
    https://codeforces.com/contest/1852/problemsA.Ntarsis'Sethttps://codeforces.com/contest/1852/problem/A感觉不是很一眼。\(n\)和\(k\)都是\(2\times10^5\),不能暴力,设当前集合为\({1,2,\dots,10^{1000}}\),那么被操作过一次的最小值就应该是\(\text{MEX}(0,......
  • 国标GB28181视频平台LntonGBS(含源码)国标视频平台播放视频时偶尔出现播放失败的问题解
    LntonGBS是基于公安部推出的安防主流协议(国标GB28181协议)的视频接入、处理及分发平台,具有视频直播监控、云端录像、云存储、检索回放、智能告警、语音对讲等功能,能够涵盖所有监控领域的视频能力需求,已经在大量的项目中落地应用,如明厨亮灶、平安乡村、雪亮工程等。有用户反馈,在某项......