BZOJ5312 冒险 势能分析、线段树】的更多相关文章

传送门 区间位赋值.区间求最大值似乎是不能够像一般的线段树一样直接打标记的,但是直接暴力也太没有面子了. 我们考虑优化一下暴力:如果说线段树的一段区间内在当前修改的所有位置上所有数都是相同的,那么这个最大值就是可以直接维护的,在上面打上标记:如果这个条件不满足就暴力向下递归. 然后交一发发现过了!然而这并不是数据水. 考虑势能分析计算复杂度.设每一个节点的势能函数为当前区间的所有数在位置上不全相同的位置个数.每一次在找到覆盖区间之后暴力向下递归,则势能函数必定减小至少\(1\),而势能的增加量最…
题目链接 BZOJ5312: 冒险 题解 如果一次操作对区间& 和 区间| 产生的影响是相同的,那么该操作对整个区间的影响都是相同的 对于每次操作,在某些位上的值,对于整个区间影响是相同的,对相同影响的操作直接打标记 否则递归子树 复杂度证明: https://csacademy.com/contest/round-70/task/and-or-max/solution/ 代码 #include<cstdio> #include<algorithm> inline int…
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1012 两种操作: 1.求序列末尾n个数中的最大值. 2.在序列末尾插入一个数. 分析 线段树求RMQ裸题,不离线也可以做. 我们来说说怎么用树状数组求RMQ. 求区间和值的树状数组中c[i]表示的是区间(i-lowbit(i)+1,c[i])的和值,我们现在让它表示这个区间的最大值. 1.查询操作get_max(l,r). 如果l<=r-lowbit(r)+1.那么c[r]表示的区间全部在(…
题解引自:http://www.cnblogs.com/wuyiqi/archive/2012/05/27/2520642.html 题意: 有n个数,刚开始都为0 add i , j 给i,j区间内的数都加1 Q i  j   询问i.j间能被三整除的数的个数 分析: 线段树记录三个域 对三取余为0的数的个数 .....1...... .....2...... 可以保存在一个数组里面 考虑到每次给一个区间加1的时候,区间内对3取余为1的数的个数变成了对三取余为2,2的变成了0,0的变成了1 所…
题目描述 区间查询最大值,结尾插入,强制在线. 分析 线段树可以做,但是练了一下分块,发现自己打错了两个地方,一个是分块的地方把/打成了%,还有是分块的时候标号要-1. 其他也没什么要多讲的. 代码 #include <bits/stdc++.h> #define inf 0x3f3f3f3f #pragma GCC optimize(2) #define ll long long #define linf 9223372036854775807 #define inf 0x3f3f3f3f…
https://cn.vjudge.net/problem/HDU-1540 题意 D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少. 分析 线段树的区间内,我们要用三个变量记录左边连续区间,右边连续区间和最大连续区间. 其它看代码,要比较仔细. #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include &l…
题意 https://www.lydsy.com/JudgeOnline/problem.php?id=4399 思路 码农题,需要一定代码功底.方法很暴力,先将权值离散,表示在线段树里储存的位置,每个连通块用一棵动点线段树存储,合并两个连通块直接对两个动点线段树进行合并,查询操作在当前连通块的线段树上进行,只不过有询问乘积大小,直接权值取原权值的 \(\ln​\) ,比较和的大小即可. 现在分析线段树合并的复杂度,举一个最基本的例子:权值为\([1,n]\) ,\(n\) 棵动点线段树,每个线…
题目 传送门:QWQ 分析 线段树维护一下最大子序列 维护一下最大前缀 最大后缀  区间和 就ok了 好像只能用结构体..... 代码 #include <bits/stdc++.h> using namespace std; ; ] ; struct Node{ int left,right,maxv,sum; }tree[maxn<<]; void update(int o,int l,int r){ tree[o].sum=tree[o<<].sum+tree[o…
uvalive4108 题意 按顺序给出 n 个矩形,每给出一个矩形,统计它在多长的部分是最高的,并把这个长度称为该矩形的覆盖度,求最后总的覆盖度(每次得到的矩形的覆盖度之和) 分析 线段树.用两个数组分别统计区间最小值和最大值,再用一个数组来存 lazy 标记,向下传递.只有大于等于区间最大值,才能把当前区间的长度加入到答案中,如果小于区间最小值直接 return. code #include<bits/stdc++.h> #define lson l, m, rt << 1 #…
昨天mac的gdb挂了,今天怎么笔记本的gdb也挂了…… Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考考你. Input 输入数据的第一行是三个整数n,m,T. 第2行到第m+1行,每行4个整数u,v,start,end.第i+1行的四个整数表示第i条边连接u,v两个点,这条边在start时刻出现,在第end时刻消失. Output 输出包含T行.在第i行中,如…