【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 ...
随机推荐
- wireshake抓包,飞秋发送信息,python
http://wenku.baidu.com/link?url=Xze_JY8T15pqI9mBLRpTxWF2d6MP-32xb6UwuE6tsUmitRDheJe-Ju87WlDEDBGuI5MF ...
- 通俗理解T检验和F检验
来源: http://blog.sina.com.cn/s/blog_4ee13c2c01016div.html 1,T检验和F检验的由来 一般而言,为了确定从样本(sample)统计结果推论至总 ...
- 040医疗项目-模块四:采购单模块—采购单创建好之后跳转到采购单修改页面(editcgd.action)
我们上一篇文章写到了要从editcgd.action为入口讲.我们要做的事根据edicgd.acion进入到Action层的一个函数,在这个函数里面要做的就是从数据库中把采购单表里面的数据都查出来显示 ...
- codevs3143 二叉树的序遍历
难度等级:白银 3143 二叉树的序遍历 题目描述 Description 求一棵二叉树的前序遍历,中序遍历和后序遍历 输入描述 Input Description 第一行一个整数n,表示这棵树的节点 ...
- U3D屏幕空间到世界空间变换
using UnityEngine; using System.Collections; public class FPSCam : MonoBehaviour { Vector3 lastPos; ...
- jboss:跟踪所有sql语句及sql参数
默认情况下,hibernate/JPA 在server.log中记录的SQL语句,参数都是用?代替的,这样不太方便. 网上留传的p6spy在最新的jboss上(EAP 6.0+版本)貌似已经不起作用了 ...
- FineUI大版本升级,外置ExtJS库、去AXD化、表格合计行、表格可编辑单元格的增删改、顶部菜单框架
这是一篇很长的文章,在开始正文之前,请允许我代表目前排名前 20 中唯一的 .Net 开源软件 FineUI 拉下选票: 投票地址: https://code.csdn.net/2013OSSurve ...
- AR播放器
一.项目需求 AR播放器:将一系列带透明通道的图片以一定的帧率连续显示,叠加载摄像头采集的画面之上,并播放声音. 此为最初级的AR技术,因为画面是事先渲染好的,固定不变的,所以实际上并不能实现“互动” ...
- swfupload提示“错误302”的解决方法
1.关于图片上传控件,flash控件的显示效果要好一些,本人使用swfupload 2.swfupload上传控件使用方式详见文档 http://www.leeon.me/upload/other/s ...
- 贪吃蛇C#和JAVA实现
using System; using System.Windows.Forms; using System.Drawing; class Window : Form { Point[] a = ]; ...