传送门 只有区间加区间开方我都会--然而加在一起我就gg了-- 然后这题的做法就是对于区间加直接打标记,对于区间开方,如果这个区间的最大值等于最小值就直接区间覆盖(据ljh_2000大佬说这个区间覆盖可以改成区间减去一个数),否则的话如果最小值等于最大值加一,且最小值和最大值开方之后减少的值一样,也直接打上区间减标记,否则递归下去 考虑复杂度,如果两个相邻的点导致包含这两个点的区间必须从这里分开才能进行开根操作,那么就称其为一个分界点,一个分界点相当于把区间开根分成两次.因为序列的初始值小于等于…
get到了标记永久化 sylvia 是一个热爱学习的女孩子,今天她想要学习数据结构技巧. 在看了一些博客学了一些姿势后,她想要找一些数据结构题来练练手.于是她的好朋友九条可怜酱给她出了一道题. 给出一个长度为 nn 的数列 AA,接下来有 mm 次操作,操作有三种: 对于所有的 i∈[l,r]i∈[l,r],将 AiAi 变成 Ai+xAi+x. 对于所有的 i∈[l,r]i∈[l,r],将 AiAi 变成 ⌊Ai−−√⌋⌊Ai⌋. 对于所有的 i∈[l,r]i∈[l,r],询问 AiAi 的和…
[UOJ228]基础数据结构练习题(线段树) 题面 UOJ 题解 我们来看看怎么开根? 如果区间所有值都相等怎么办? 显然可以直接开根 如果\(max-sqrt(max)=min-sqrt(min)\)怎么办? 此时意味着虽然开根出来的值不同,但是减去的值相同 举个例子,比如\(8,9\) 开根后是\(2,3\) 虽然值不同,但是差相同 所以,我们把开根换成区间减法 当出现上述两种情况时下放减法标记即可 #include<iostream> #include<cstdio> #in…
#228. 基础数据结构练习题 统计 描述 提交 自定义测试 sylvia 是一个热爱学习的女孩子,今天她想要学习数据结构技巧. 在看了一些博客学了一些姿势后,她想要找一些数据结构题来练练手.于是她的好朋友九条可怜酱给她出了一道题. 给出一个长度为 nn 的数列 AA,接下来有 mm 次操作,操作有三种: 对于所有的 i∈[l,r]i∈[l,r],将 AiAi 变成 Ai+xAi+x. 对于所有的 i∈[l,r]i∈[l,r],将 AiAi 变成 ⌊Ai−−√⌋⌊Ai⌋. 对于所有的 i∈[l,…
题面:http://uoj.ac/problem/228 正解:线段树. 我们可以发现,开根号时一个区间中的数总是趋近相等.判断一个区间的数是否相等,只要判断最大值和最小值是否相等就行了.如果这个区间的数相等,那么他们开方的数也相等,我们直接转化为减去一个数就行了. 但是这是没有办法$AC$的,我们还要加一个特判,就是最大值与最小值差为$1$,且他们开方以后的差也为$1$,如$8$和$9$这两个数,这样就能通过所有数据了.复杂度证明?我不会.. //It is made by wfj_2048~…
题面传送门 神仙题. 乍一看和经典题 花神游历各国有一点像,只不过多了一个区间加操作.不过多了这个区间加操作就无法再像花神游历各国那样暴力开根直到最小值为 \(1\) 为止的做法了,稍微感性理解一下即可明白,比方说你对一个已经全变为 \(1\) 的长度为 \(10^5\) 区间再加上 \(10^5\),那还需要 \(10^5\times\log 10^5\) 次区间修改操作才能变回原样,这样一来复杂度必然爆炸. 注意到我们对一个区间进行全局加,是不影响它的极差的,因此我们考虑用极差的角度思考这个…
题目链接:http://uoj.ac/problem/228 代码:(先开个坑在这个地方) #include<bits/stdc++.h> using namespace std; ; long long a[N]; struct node{ int l,r; long long maxx,minn,sum; long long lazy; void up(long long val){ maxx+=val;minn+=val;sum+=(r-l+)*1ll*val; lazy+=val; }…
题目链接 一个数被开方 #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) #define maxn 300003 #define ll long long using namespace std; int n,m; ll mx[maxn<<2],mn[maxn<…
题意 题目链接 Sol 这题关键是注意到题目中的\(b\)是个排列 那么最终的答案最多是\(nlogn\)(调和级数) 设\(d_i\)表示\(i\)号节点还需要加\(d_i\)次才能产生\(1\)的贡献 用线段树维护每个节点里\(d_i\)的最小值,每次当\(d_i - 1= 0\)的时候往下递归即可 时间复杂度:\(O(nlog^2 n)\) 多组数据记得清空lazy标记啊qwq.... #include<bits/stdc++.h> using namespace std; const…
题解 传送门 题解 然而要我来说我感觉只是个爆搜啊-- //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define ls (p<<1) #define rs (p<<1|1) #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;-…