4636: 蒟蒻的数列

Time Limit: 30 Sec  Memory Limit: 256 MB
Submit: 381  Solved: 177
[Submit][Status][Discuss]

Description

蒟蒻DCrusher不仅喜欢玩扑克,还喜欢研究数列
题目描述
DCrusher有一个数列,初始值均为0,他进行N次操作,每次将数列[a,b)这个区间中所有比k小的数改为k,他想知
道N次操作后数列中所有元素的和。他还要玩其他游戏,所以这个问题留给你解决。
 

Input

第一行一个整数N,然后有N行,每行三个正整数a、b、k。
N<=40000 , a、b、k<=10^9
 

Output

一个数,数列中所有元素的和
 

Sample Input

4
2 5 1
9 10 4
6 8 2
4 6 3

Sample Output

16

思路一: 主席树(刚开始没想到,我好菜呀,明明这两天主席树还刚刚碰到的)

因为一共只有40000个操作,而且a和b的询问区间特别大,所以所有的更新节点不会太多,那么我们就用主席树,因为主席树每次最多就建立log个节点,所以能否符合要求。所以就用主席树打标记,然后如果lnub=0,那么就ans+=(mid-l+1)*val,如果rnub=0,那么ans+=(r-mid)*val,如果lnub=0&&rnub=0,那么ans+=(r-l+1)*val;即可完成query操作

//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker,"/STACK:102400000,102400000")
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define haha printf("haha\n")
const int inf = 1e9 + ;
const int maxn = + ;
int n, root[maxn], tot;
struct Tree{
int lnub, rnub, val;
}tree[maxn * ];
LL ans; int update(int o, int ql, int qr, int l, int r, int cost){
int k = ++tot;
tree[k] = tree[o];
if (ql <= l && qr >= r) {
tree[k].val = max(tree[k].val, cost);
return k;
}
int mid = (l + r) / ;
if (ql <= mid) tree[k].lnub = update(tree[o].lnub, ql, qr, l, mid, cost);
if (qr > mid) tree[k].rnub = update(tree[o].rnub, ql, qr, mid + , r, cost);
return k;
} void push_down(int o){
int lb = tree[o].lnub, rb = tree[o].rnub;
tree[lb].val = max(tree[lb].val, tree[o].val);
tree[rb].val = max(tree[rb].val, tree[o].val);
} void query(int o, int l, int r){
if (!tree[o].lnub && !tree[o].rnub){
ans = ans + 1LL * (r - l + ) * tree[o].val;
return ;
}
push_down(o);
int mid = (l + r) / ;
if (tree[o].lnub) query(tree[o].lnub, l, mid);
if (tree[o].rnub) query(tree[o].rnub, mid + , r);
if (!tree[o].lnub) ans = ans + 1LL * (mid - l + ) * tree[o].val;
if (!tree[o].rnub) ans = ans + 1LL * (r - mid) * tree[o].val;
} int main(){
cin >> n;
for (int i = ; i <= n; i++){
int a, b, k; scanf("%d%d%d", &a, &b, &k);
root[i] = update(root[i - ], a, b-, , inf, k);
}
query(root[n], , inf);
cout << ans << endl;
return ;
}

关键:区间的大小

思路二:分块

这道题分块不难想,对于每个区间如果某一个块是完整的,就令他maxval[当前块的id]=k。然后如果询问的是不完整的,就暴力的对这个块进行重构。所以这样的复杂度最坏应该是3*n^1.5。然后关键的麻烦的就是如果两个区间之间如何求值啊,我不会啊,感觉自己写的好麻烦啊——不过这里呢,我看了卿学姐的想法,感觉好神啊,这里就介绍一下咯。

我们把所有的区间都扔进去,因为询问的区间是[a,b),那么,我们就每次把a,b-1,b这三个元素都扔到这个区间里面去就好啦,然后每次询问的时候就是将[a,b-1),[b-1,b)这样子更新就好了。感觉超级超级方便,都不需要特判两边的区间是否相等之类的乱七八糟的东西了

卿学姐的:链接

主席树 或者 离散化+分块 BZOJ 4636的更多相关文章

  1. 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)

    Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...

  2. POJ 2104&HDU 2665 Kth number(主席树入门+离散化)

    K-th Number Time Limit: 20000MS   Memory Limit: 65536K Total Submissions: 50247   Accepted: 17101 Ca ...

  3. LuoguP3834 【模板】可持久化线段树 1(主席树)|| 离散化

    题目:[模板]可持久化线段树 1(主席树) 不知道说啥. #include<cstdio> #include<cstring> #include<iostream> ...

  4. [BZOJ3932] [CQOI2015]任务查询系统(主席树 || 树状数组 套 主席树 + 差分 + 离散化)

    传送门 看到这个题有个很暴力的想法, 可以每一个时间点都建一颗主席树,主席树上叶子节点 i 表示优先级为 i 的任务有多少个. 当 x 到 y 有个优先级为 k 的任务时,循环 x 到 y 的每个点, ...

  5. 2019杭电多校第⑨场B Rikka with Cake (主席树,离散化)

    题意: 给定一块n*m的矩形区域,在区域内有若干点,每个顶点发出一条射线,有上下左右四个方向,问矩形被分成了几个区域? 思路: 稍加观察和枚举可以发现,区域数量=射线交点数+1(可以用欧拉定理验证,但 ...

  6. 【dfs序】【二分】【主席树】【分块】bzoj3351 [ioi2009]Regions

    http://dzy493941464.sinaapp.com/archives/96 那个SIZE貌似必须设成R*R/Q?不知为啥,自己算的不是这个的说. 本机AC,线上TLE. #include& ...

  7. 主席树总结(经典区间第k小问题)(主席树,线段树)

    接着上一篇总结--可持久化线段树来整理吧.点击进入 这两种数据结构确实有异曲同工之妙.结构是很相似的,但维护的主要内容并不相同,主席树的离散化.前缀和等思想也要更难理解一些. 闲话 话说刚学习主席树的 ...

  8. 【BZOJ4556】字符串(后缀数组,主席树)

    [BZOJ4556]字符串(后缀数组,主席树) 题面 BZOJ 题解 注意看题: 要求的是\([a,b]\)的子串和[c,d]的\(lcp\)的最大值 先来一下暴力吧 求出\(SA\)之后 暴力枚举\ ...

  9. 【BZOJ4408】[FJOI2016]神秘数(主席树)

    [BZOJ4408][FJOI2016]神秘数(主席树) 题面 BZOJ 洛谷 题解 考虑只有一次询问. 我们把所有数排个序,假设当前可以表示出的最大数是\(x\). 起始\(x=0\). 依次考虑接 ...

随机推荐

  1. FIsherman丶Team

    小组成员:郝恒杰,洪佳兴,张子祥 组长:郝恒杰 项目:Fisher Job(渔夫兼职) 简介: 我们的产品渔夫兼职是为了解决大学生兼职群体 的痛苦,他们需要一个好的渠道去找一个让自己满意的兼职,但是现 ...

  2. CS小分队第二阶段冲刺站立会议(5月26日)

    昨天成果:对扫雷进行了全面的优化,增加了特色皮肤,为其添加了游戏音效,并且做出了换肤的接口. 今日计划:应队友要求对抽号倒计时器进行分离,修改界面结构以便美化. 遇到问题:扫雷的界面美化比较困难,自动 ...

  3. 团队Alpha冲刺(九)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  4. 第8章 Linux磁盘与文件系统管理

    认识EXT2文件系统 文件的系统特性 Linux的正规文件系统为Ext2 文件数据除了文件实际内容外,还包括其他属性(文件权限.文件属性). 文件系统将这两部分数据分别存放在不同的块,权限和属性放在i ...

  5. springMVC 流程

    springMVC流程控制 SpringMVC流程 web.xml 中配置 org.springframework.web.servlet.DispatcherServlet 这一步其实和spring ...

  6. C 语言疑难杂症 [转:http://blog.chinaunix.net/uid-20688544-id-1894880.html]

    无聊在网上找了些C语言的东东练一下手,竟然发现其实还有好多细节之前,没注意到,该好好复习一下先. 解决掉的问题先不发出来,把疑问的先做个笔记,过几天解决了就回来修改补上.   #include < ...

  7. sharepoint content type publishing

    1. Create 1 Project Team sites (Site1) on SharePoint(可以用普通site)2. Go to http://<PCName>:8080/_ ...

  8. jQuery数据表格控件boostrap-table

    表格初始化js代码 function TableInit() { $("#edit").attr({"disabled":"disabled" ...

  9. 第166天:canvas绘制饼状图动画

    canvas绘制饼状图动画 1.HTML <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  10. 【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...