BZOJ_4636_蒟蒻的数列_线段树+动态开点
BZOJ_4636_蒟蒻的数列_线段树+动态开点
Description
Input
Output
Sample Input
2 5 1
9 10 4
6 8 2
4 6 3
Sample Output
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
#define N 40050
#define maxn 1000000000
typedef long long ll;
struct A {
int l,r,k;
}a[N];
bool cmp(const A &x,const A &y) {return x.k<y.k;}
int tag[N*80],cnt,n,ls[N*80],rs[N*80];
ll t[N*80];
/*int make(int x) {
return lower_bound(v+1,v+cnt+1,x)-v;
}*/
void pushdown(int l,int r,int &p,int w) {
if(!p) p=++cnt;
t[p]=1ll*w*(r-l+1); tag[p]=w;
}
void update(int l,int r,int x,int y,int w,int &p) {
if(p==0) p=++cnt;
if(x<=l&&y>=r) {
t[p]=1ll*w*(r-l+1);
tag[p]=w;
return ;
}
int mid=(l+r)>>1;
if(tag[p]) {
pushdown(l,mid,ls[p],tag[p]);
pushdown(mid+1,r,rs[p],tag[p]);
tag[p]=0;
}
if(x<=mid) update(l,mid,x,y,w,ls[p]);
if(y>mid) update(mid+1,r,x,y,w,rs[p]);
t[p]=t[ls[p]]+t[rs[p]];
}
int main() {
scanf("%d",&n);
int i;
for(i=1;i<=n;i++) {
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].k);
a[i].r--;
/*v[++cnt]=a[i].l;
v[++cnt]=a[i].r;*/
}
/*sort(v+1,v+cnt+1);
cnt=unique(v+1,v+cnt+1)-v-1;
printf("%d\n",cnt);
for(i=1;i<=cnt;i++) printf("%d\n",v[i]); */
sort(a+1,a+n+1,cmp);
int root=0;
for(i=1;i<=n;i++) {
if(a[i].k==0) continue;
/*printf("%d %d\n",make(a[i].l),make(a[i].r));
update(1,cnt,make(a[i].l),make(a[i].r),a[i].k,1);
printf("sum=%lld\n",t[1]);*/
update(1,maxn,a[i].l,a[i].r,a[i].k,root);
}
printf("%lld\n",t[1]);
}
BZOJ_4636_蒟蒻的数列_线段树+动态开点的更多相关文章
- [bzoj4636]蒟蒻的数列_线段树
蒟蒻的数列 bzoj-4636 题目大意:给定一个序列,初始均为0.n次操作:每次讲一段区间中小于k的数都变成k.操作的最后询问全局和. 注释:$1\le n\le 4\cdot 10^4$. 想法: ...
- 【bzoj4636】蒟蒻的数列 离散化+线段树
原文地址:http://www.cnblogs.com/GXZlegend/p/6801379.html 题目描述 蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列 题目描述 DCrusher有一个 ...
- hdu6183 Color it 线段树动态开点+查询减枝
题目传送门 题目大意: 有多次操作.操作0是清空二维平面的点,操作1是往二维平面(x,y)上放一个颜色为c的点,操作2是查询一个贴着y轴的矩形内有几种颜色的点,操作3退出程序. 思路: 由于查询的矩形 ...
- P3939 数颜色 线段树动态开点
P3939 数颜色 线段树动态开点 luogu P3939 水.直接对每种颜色开个权值线段树即可,注意动态开点. #include <cstdio> #include <algori ...
- HDU - 6183 暴力,线段树动态开点,cdq分治
B - Color itHDU - 6183 题目大意:有三种操作,0是清空所有点,1是给点(x,y)涂上颜色c,2是查询满足1<=a<=x,y1<=b<=y2的(a,b)点一 ...
- 洛谷P3313 [SDOI2014]旅行 题解 树链剖分+线段树动态开点
题目链接:https://www.luogu.org/problem/P3313 这道题目就是树链剖分+线段树动态开点. 然后做这道题目之前我们先来看一道不考虑树链剖分之后完全相同的线段树动态开点的题 ...
- codedecision P1113 同颜色询问 题解 线段树动态开点
题目描述:https://www.cnblogs.com/problems/p/11789930.html 题目链接:http://codedecision.com/problem/1113 这道题目 ...
- 2019.03.09 bzoj4999: This Problem Is Too Simple!(树链剖分+线段树动态开点)
传送门 题意:给一颗树,每个节点有个初始值,要求支持将i节点的值改为x或询问i节点到j节点的路径上有多少个值为x的节点. 思路: 考虑对每种颜色动态开点,然后用树剖+线段树维护就完了. 代码: #in ...
- Gym - 101848C Object-Oriented Programming (树链剖分+线段树+动态开点)
C. Object-Oriented Programming time limit per test 3.0 s memory limit per test 1024 MB input standar ...
随机推荐
- OpenShift实战(七):OpenShift定制镜像S2I
1.基础镜像制作 由于公司的程序是Java开发,上线发布使用的是maven,如果使用openshift自带的S2I,每次都会全量拉取代码(代码比较多,每次全量拉太慢),然后每次打包都会再一次下载mav ...
- Course1-Python数据类型总结
一. 开始正式学习前的tips: Python和其他语言有很多类似, 也有一些差异, 下面先总结了一些基本语法上的注意事项 1. 注意缩进 2. 一行语句分为多行显示: \ 3. 注释: 单行注释#, ...
- 分割url
$(document).ready(function () { var spurl = document.location.toString().split("/"); //把ur ...
- java程序的内存分配(二)
前言 您是否是动态分配的 C/C++ 对象忠实且幸运的用户?您是否在模块间的往返通信中频繁地使用了"自动化"?您的程序是否因堆分配而运行起来很慢?不仅仅您遇到这样的问题.几乎所有项 ...
- DDD中直接引用和ID关联的关系
聚合根到聚合根:通过ID关联: 聚合根到其内部的实体,直接引用: 聚合根到值对象,直接引用: 实体到聚合根: 通过ID关联 : 实体到其聚合的聚合根:1对1ID关联,1对多可直接引用 : 实体到其聚合 ...
- Partitions - Partition Storage Modes and Processing-MOLAP、ROLAP、HOLAP
https://docs.microsoft.com/en-us/sql/analysis-services/multidimensional-models-olap-logical-cube-obj ...
- 用js来实现那些数据结构16(图02-图的遍历)
上一篇文章我们简单介绍了一下什么是图,以及用JS来实现一个可以添加顶点和边的图.按照惯例,任何数据结构都不可或缺的一个point就是遍历.也就是获取到数据结构中的所有元素.那么图当然也不例外.这篇文章 ...
- Zookeeper + Dubbo + SpringMVC + dubbo-admin
第一步:在CentOS/Windows上安装Zookeeper[前提] A:CentOS Zookeeper作为Dubbo服务的注册中心,Dubbo原先基于数据库的注册中心,没采用Zookee ...
- bootstrap-table+x-editable入门
Bootstrap-table 快速入门bootstrap-table----我的表单不可能这么帅. Table of contents Quick start Why use it What's i ...
- js 写21点
======================================= var count = 0; function cc(card) {// Only change code below ...