【BZOJ】3211: 花神游历各国】的更多相关文章

线段树...区间开方...明显是要处理到叶节点的 之前在CF做过道区间取模...差不多, 只有开方, 那么每个数开方次数也是有限的(0,1时就会停止), 最大的数10^9开方10+次也就不会动了.那么我们线段树多记个max就可以少掉很多不必要的操作 -------------------------------------------------------------------------------------------- #include<cstdio> #include<cs…
3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3514  Solved: 1306[Submit][Status][Discuss] Description   Input   Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 1 1 4 Sample Output 101 11 11 HINT 对于100%…
题意 给出一些数,有两种操作.(1)将区间内每一个数开方(2)查询每一段区间的和 分析 普通的线段树保留修改+开方优化.可以知道当一个数为0或1时,无论开方几次,答案仍然相同.所以设置flag=1变表示这一段区间全是0/1,那么修改的时候直接暴力遍历线段树结点.因为一个数被开方下取整到1,只会被开方几次,所以说这样修改是O(n)O(n)O(n)的.总时间还是O(nlogn)O(nlogn)O(nlogn) CODE1 上帝造题的七分钟2 #include <cctype> #include &…
题目大意: 一个数列 支持两种操作 1 把区间内的数变成他们自己的约数个数 2 求区间和 思路: 可以想到每个数最终都会变成2或1 然后我们可以线段树 修改的时候记录一下每段有没有全被修改成1或2 是的话就不修改了 不是就暴力修改 因为每个数被修改的次数很小 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #includ…
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3211 题目大意: 思路: 由于数据范围只有1e9,一个数字x开根号次数超过logx之后均为1,所以可以暴力开根号,但是需要剪枝优化,如果子树的max小于等于1,那么直接跳过即可.否则递归到叶子节点暴力开根号. #include<bits/stdc++.h> #define IOS ios::sync_with_stdio(false);//不可再使用scanf printf #de…
#include<cstdio> #include<cmath> #include<iostream> #define M 100006 using namespace std; struct data { int l,r; long long zhi; bool kg; }shu[*M]; int n,m; void jian(int a1,int l,int r) { shu[a1].l=l; shu[a1].r=r; if(l==r) { scanf("…
题解:首先,单点修改求区间和可以用树状数组实现,因为开平方很耗时间,所以在这个方面可以优化,我们知道,开平方开几次之后数字就会等于1 ,所以,用数组记录下一个应该开的数,每次直接跳到下一个不是1的数字进行开平方,至于这个数组,可以用并查集维护. #include <cstdio> #include <cmath> #include <iostream> using namespace std; typedef long long LL; LL c[100005]; in…
题意 \(n\)个点,第\(i\)个点值为\(a_i\).\(m\)个询问,每次询问\([l, r]\)内的和或者将\([l, r]\)的每个值改为自己的算术平方根.(\(n \le 100000, m \le 200000, 0 \le a_i \le 10^9\)) 分析 \(10^9\)开几次方就到\(1\)或者\(0\)了,所以对于已经到\(1\)或\(0\)的我们可以直接跳过. 题解 我们用一个并查集来维护"下一个".即\(p_i\)表示从当前点开始不为\(1\)和\(0\)…
[算法]线段树||树状数组&&并查集 [题解]修改必须暴力单点修改,然后利用标记区间查询. 优化:一个数经过不断开方很快就会变成1,所以维护区间最大值. 修改时访问到的子树最大值<=1时,该区间就不必修改. #include<cstdio> #include<cmath> #include<algorithm> using namespace std; ; ]; int n,m;long long a[maxn]; void build(int k…
线段树/暴力 线段树区间开方 唉,我傻逼了一下,TLE了一发,因为没考虑到0的情况…… 好吧简单来说一下,线段树动态查询区间和大家都会做……比较麻烦的是这次的修改变成开方了,然而这并没有什么好虚的,注意到权值的范围是$10^9$,我们随手打个表可以发现,对$10^9$不断开根的结果是:1000000000,31622,177,13,3,1.也就是说,每个数,它开根的次数并没有多少(联想一下CF 250的那道区间取模的题!)所以我们维护一个区间最大值,每次暴力对每个数开根就可以了(如果区间最大值为…