【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化
4636: 蒟蒻的数列
Time Limit: 30 Sec Memory Limit: 256 MB
Submit: 247 Solved: 113
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
2 5 1
9 10 4
6 8 2
4 6 3
Sample Output
HINT
Source
Solution
这题似乎是IOI-Wall的弱化版
可行的做法有两种:
Part1: 动态开点线段树
动态的添加区间,标记永久化
最后遍历一遍线段树,统计一下答案
Part2:离散化普通线段树
把需要操作的区间离散化,对每个节点维护左右端点.离散化后对应长度.以及K
在打标记的时候,注意比较,实际上和标记永久化维护半平面交有点类似的思想
然后区间修改区间求和就可以了
Part1.时间较优,但空间较大 Part2.时间尚可,但空间较优
Code
最开始大家想法是Part2,但这里提供更好写的Part1
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
int N,a,b,K;
long long ans;
#define MAXN 50000
struct SegmentTreeNode
{
int data[MAXN<<],son[MAXN<<][],root,sz;
void Insert(int &rt,int l,int r,int L,int R,int x)
{
if (L>R) return;
if (!rt) rt=++sz;
if (l==L && R==r) {data[rt]=max(data[rt],x); return;}
int mid=(l+r)>>;
if (R<=mid) Insert(son[rt][],l,mid,L,R,x);
else if (L>mid) Insert(son[rt][],mid+,r,L,R,x);
else Insert(son[rt][],l,mid,L,mid,x),Insert(son[rt][],mid+,r,mid+,R,x);
}
void Query(int rt,int l,int r,int x)
{
if (!rt) return;
data[rt]=max(data[rt],x);
if (!son[rt][] && !son[rt][]) {ans+=(long long)((r-l+)*data[rt]); return;}
int mid=(l+r)>>;
Query(son[rt][],l,mid,data[rt]),Query(son[rt][],mid+,r,data[rt]);
if (!son[rt][]) ans+=(long long)((mid-l+)*data[rt]);
if (!son[rt][]) ans+=(long long)((r-mid)*data[rt]);
}
}SegTree;
#define INF (int)1e9
void Freopen() {freopen("sequence.in","r",stdin);freopen("sequence.out","w",stdout);}
void Fclose() {fclose(stdin);fclose(stdout);}
int main()
{
//Freopen();
N=read();
while (N--)
a=read(),b=read(),K=read(),
SegTree.Insert(SegTree.root,,INF,a,b-,K);
SegTree.Query(SegTree.root,,INF,);
printf("%lld\n",ans);
return ;
}
蛋爷上传的题目,最早来源是faebdc学长放到洛谷上的
澄清一个事实: 题面里的DCrusher是神犇!是神犇!是神犇!不是蒟蒻
【BZOJ-4636】蒟蒻的数列 动态开点线段树 ||(离散化) + 标记永久化的更多相关文章
- BZOJ4636: 蒟蒻的数列(动态开节点线段树)
题意 题目链接 Sol 直接上动态开节点线段树 因为只有一次询问,所以中途不需要下传标记 #include<bits/stdc++.h> #define LL long long usin ...
- 【刷题】BZOJ 4636 蒟蒻的数列
Description 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想 ...
- BZOJ 4636: 蒟蒻的数列 分块
4636: 蒟蒻的数列 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4636 Description 蒟蒻DCrusher不仅喜欢玩扑克 ...
- BZOJ 4636 蒟蒻的数列
二分写错了血T..... 线段树标记永久化. #include<iostream> #include<cstdio> #include<cstring> #incl ...
- 【BZOJ】4636: 蒟蒻的数列
4636: 蒟蒻的数列 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 145 Solved: 71[Submit][Status][Discuss] ...
- BZOJ 3531 [Sdoi2014]旅行 树链剖分+动态开点线段树
题意 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰. 为了方便,我们用 ...
- [bzoj 3531][SDOI2014]旅行(树链剖分+动态开点线段树)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3531 分析: 对于每个颜色(颜色<=10^5)都建立一颗线段树 什么!那么不是M ...
- BZOJ 3531: [Sdoi2014]旅行 (树剖+动态开点线段树)
对于每种信仰维护一棵动态开点线段树就行了- #include <cstdio> #include <cctype> #include <cstring> #incl ...
- Luogu P3960 列队(动态开点线段树)
P3960 列队 题意 题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia所在的方阵中有\(n \times m ...
随机推荐
- PHP用户注册邮箱验证激活帐号
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...
- C语言:void指针
使用前必须进行强制类型转换 #include <stdio.h> void test(const void *p); int main(){ ; int *p = &i; puts ...
- Ubuntu终端命令行不显示颜色
在网上找到的一个有效方案是在.bash_profile 中增加颜色定义 export LS_COLORS='di=01;35:ln=01;36:pi=40;33:so=01;35:do=01;35:b ...
- Splay整理
伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.(来自百科) 伸展树的操作主要是
- BZOJ 1854 【Scoi2010】 游戏
Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性 ...
- 尝试HTML + JavaScript 编写Windows App
一直以来博文中使用最多的就是C# + XAML.进入Windows App时代,又多了一对 Javascript + HTML组合,这对于Web开发的程序员来说再熟悉不过了.其实小编也做过几年的Web ...
- Cordova - 使用Cordova开发iOS应用实战1(配置、开发第一个应用)
Cordova - 使用Cordova开发iOS应用实战1(配置.开发第一个应用) 现在比较流行使用 html5 开发移动应用,毕竟只要写一套html页面就可以适配各种移动设备,大大节省了跨平台应用的 ...
- 深度学习(deep learning)
最近deep learning大火,不仅仅受到学术界的关注,更在工业界受到大家的追捧.在很多重要的评测中,DL都取得了state of the art的效果.尤其是在语音识别方面,DL使得错误率下降了 ...
- python数字图像处理(18):高级形态学处理
形态学处理,除了最基本的膨胀.腐蚀.开/闭运算.黑/白帽处理外,还有一些更高级的运用,如凸包,连通区域标记,删除小块区域等. 1.凸包 凸包是指一个凸多边形,这个凸多边形将图片中所有的白色像素点都包含 ...
- 《深入理解Spark:核心思想与源码分析》(第2章)
<深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...