【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 ...
随机推荐
- Ninject 学习杂记
IOC容器的DI实现并不依赖于方法调用拦截,而是通过DI容器内部自己通过反射的方式生成需要的类型实例,并调用实例的成员.然后再把实例返回给容器外部环境使用. Ninject本身及其扩展库,还针对特定的 ...
- 微软职位内部推荐-Senior Software Engineer_Azure
微软近期Open的职位: Job Title: Senior Software Engineer Location: Shanghai, China Have you ever imagined th ...
- Java的性能优化
http://www.toutiao.com/i6368345864624144897/?tt_from=mobile_qq&utm_campaign=client_share&app ...
- 【LeetCode】95. Unique Binary Search Trees II
Unique Binary Search Trees II Given n, generate all structurally unique BST's (binary search trees) ...
- 整合Apache与PHP教程
Apache下载安装完成后,PHP下载解压后,最重要的是如何将他们连接起来,就是整合到一起,让它们之间有联系,笔者根据自己多次配的经验和帮学弟学妹配时他们的理解程度整理了一个比较详细易理解的版本,下面 ...
- 更好的逐帧动画函数 — requestAnimationFrame 简介
本文将会简单讲讲 requestAnimationFrame 函数的用法,与 setTimeout/setInterval 的区别和联系,以及当标签页隐藏时 requestAnimationFrame ...
- 网页上传图片 判断类型 检测大小 剪切图片 ASP.NET版本
本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=56&extra=page%3D1 我们在网页上传图片的时候,特 ...
- 深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断
开篇请各位猿友允许LZ啰嗦几句,最近一直在写计算机系统原理这系列文章,也已经下定决心要把这本书的内容写完.主要目的其实是为了巩固LZ的理解,另外也想把这些内容分享给猿友们,毕竟LZ觉得这些内容对程序猿 ...
- 安卓 Context 和 Application的关系
1. 我开始一直不理解显式Intent中传一个this(当前的activity)是为什么.因为Intent里面的构造方法对应的只有 Context, Class.后面查资料才发现 Intent i = ...
- “CEPH浅析”系列之六——CEPH与OPENSTACK
在 <"Ceph浅析"系列之二--Ceph概况>中即已提到,关注Ceph的原因之一,就是OpenStack社区对于Ceph的重视.因此,本文将对Ceph在OpenSta ...