好久木有做题啦!

/* I will wait for you */#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <string>
#include <ext/pb_ds/priority_queue.hpp>
#define fi first
#define se secondusing namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef map<int, int> mii;const int maxn = 500010;
const int maxm = 1010;
const int maxs = 26;
const int inf = 0x3f3f3f3f;
const int P = 1000000007;
const double eps = 1e-6;inline ll read()
{ll x = 0, f = 1; char ch = getchar();while (ch < '0' || ch > '9')f = (ch == '-' ? -1 : 1), ch = getchar();while (ch >= '0' && ch <= '9')x = x * 10 + ch - '0', ch = getchar();return x * f;
}struct query
{int x, y, type;
} e[maxn];bool operator < (query a, query b)
{return a.y > b.y;
}int n, m, top, h[maxn], sta[maxn], sum_1[maxn], sum_2[maxn], dp[maxn];__gnu_pbds::priority_queue<query> pri[maxn];void init()
{for (int i = 1; i <= n; i++) {pri[i].clear(), dp[i] = 0;sum_1[i] = sum_2[i] = 0;}
}int main()
{int T = read(), cnt = 0;while (T--) {n = read(), m = read(), init();for (int i = 1; i <= n - 1; i++)h[i] = read();h[0] = h[n] = inf;for (int i = 1; i <= m; i++) {int x = read(), y = read() + 1, t = read();e[i] = (query) {x, y, t};pri[x].push(e[i]), sum_2[x] += (t == 0);}top = sta[0] = 0;for (int i = 1; i <= n; i++) {            while (h[i] > h[sta[top]]) {int cnt_1 = 0, cnt_2 = 0, hig = 0;int ans = sum_1[i] + sum_2[i], j = sta[top];while (!pri[i].empty() && pri[i].top().y <= h[j]) {query tmp = pri[i].top(); pri[i].pop();if (tmp.y != hig) {sum_1[i] += cnt_1, cnt_1 = 0;sum_2[i] -= cnt_2, cnt_2 = 0;ans = max(ans, sum_1[i] + sum_2[i]);hig = tmp.y;}cnt_1 += (tmp.type == 1);cnt_2 += (tmp.type == 0);}sum_1[i] += cnt_1, sum_2[i] -= cnt_2;ans = max(ans, sum_1[i] + sum_2[i]);dp[i] = max(dp[i], dp[j] + ans);sum_1[i] += sum_1[j], sum_2[i] += sum_2[j];top -= 1, pri[i].join(pri[j]);}int cnt_1 = 0, cnt_2 = 0, hig = 0;int ans = sum_1[i] + sum_2[i], j = sta[top];while (!pri[i].empty() && pri[i].top().y <= h[i]) {query tmp = pri[i].top(); pri[i].pop();if (tmp.y != hig) {sum_1[i] += cnt_1, cnt_1 = 0;sum_2[i] -= cnt_2, cnt_2 = 0;ans = max(ans, sum_1[i] + sum_2[i]);hig = tmp.y;}cnt_1 += (tmp.type == 1);cnt_2 += (tmp.type == 0);}    sum_1[i] += cnt_1, sum_2[i] -= cnt_2;ans = max(ans, sum_1[i] + sum_2[i]);dp[i] = max(dp[i], dp[j] + ans);                sta[++top] = i;}printf("Case #%d: %d\n", ++cnt, dp[n]);}return 0;
}

HDOJ【5575】【单调栈】【可并堆】相关推荐

  1. bzoj 1233: [Usaco2009Open]干草堆tower【dp+单调栈】

    参考:https://www.cnblogs.com/N-C-Derek/archive/2012/07/11/usaco_09_open_tower.html 虽然长得很像斜率优化,但是应该不算-- ...

  2. POJ - 2559 Largest Rectangle in a Histogram(笛卡尔树,单调栈实现)

    题目链接:点击查看 题目大意:给出一排高度不同,宽度都为 1 的矩形,问拼起来后最大的矩形面积是多少 题目分析:普通做法是用单调栈直接维护,我一直觉得单调栈处理这种矩形问题都比较抽象,也可能是我太菜了 ...

  3. POJ - 2201 Cartesian Tree(笛卡尔树-单调栈/暴跳父亲)

    题目链接:点击查看 题目大意:给出n个节点的key和val,构造出其笛卡尔树的原型 笛卡尔树的定义: 所谓笛卡尔树,就是将给定的n个二元组(key,val)建成一棵树.使得: 如果只关注key,那么这 ...

  4. 单调栈之Next Greater Number

    单调栈之Next Greater Number 栈(stack) 是很简单的⼀种数据结构, 先进后出的逻辑顺序, 符合某些问 题的特点, ⽐如说函数调⽤栈. 单调栈实际上就是栈, 只是利⽤了⼀些巧妙的 ...

  5. 【贪心-单调栈】中山纪念中学暑期游Day12——灵知的太阳信仰

    前言 感觉自己就没弄懂过 单调栈\队列相关的优化... ... 题目 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰, ...

  6. P1823 [COI2007] Patrik 音乐会的等待 单调栈

    单调栈 链接 栈底维护的是目前身高最高的人,因为在此人前的人因为此人的存在不能与后来的人联系了,所以如果遇到身高高的人就不断让比他身高矮的人出栈即可.不过我们还要留意身高相同的情况. 由于要考虑重复的 ...

  7. 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题

    layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...

  8. POJ2796 Feel Good(单调栈)

    题意: 给出一列数据,要求一个区间内最小值与区间内数据总和乘积最大值 要点: 还是单调栈,这次我自己写的,先做了几题比较简单的果然还是有效果的,这题也是一样,按点遍历,网上大神做的是直接遍历一次即可, ...

  9. 【单调栈 前缀和 异或】7.21序列求和

    还要再细细思考的奇妙思路 题目描述 小A最近喜欢上了关于区间max的问题.她定义一个区间的价值是max(ai)(l<=i<=r)∗(alxoral+1xor...xorar)max(ai) ...

  10. 栈与队列7——单调栈结构(进阶问题)

    题目 一个含有重复值的数组arr,找到每一个i位置左边和右边离i位置最近且值比arr[i]小的位置,返回所有相应的信息. 举例:arr={3,4,1,5,6,2,7},返回如下的二维数组作为结果:{{ ...

最新文章

  1. VC6在64位Win7下调试无法退出的问题(缺少TLLOC.DLL和DM.dll)
  2. JavaScript实现完整的ComplexNumber复数类(附完整源码)
  3. java hashmap 输出_JAVA如何把HashMap内容输出到文本文件
  4. NAT STURN,ICE
  5. 计算机机房建设目标是什么,计算机机房建设方案计划.doc
  6. 如何绘制逻辑图 — 3.要素的属性:粒度与分层
  7. shared_ptr四宗罪
  8. 蓝鸥iOS开发教程C语言——while语句
  9. Http通信(HttpClient)
  10. minecraft_如何使用MultiMC管理Minecraft实例和模组
  11. Android Studio+SDK+tools下载、安装、配置及应用程序运行(详细,亲测)
  12. 西安电子科技大学计算机考研资料汇总
  13. 电脑右下角没有看到小喇叭图标了该怎么办
  14. reg query报错系统找不到指定的注册表项或值。
  15. html css jsp 数据库,html、css、js、jsp的区别是什么?
  16. 全球及中国停车信息系统行业研究及十四五规划分析报告
  17. 3、组推荐系统及其应用研究---张玉洁(2016)
  18. SBW(线控转向系统Matlab/Simulink模型搭建)
  19. 用eclipse配置hibernate的hbm.xml文件时遇到的一些问题
  20. jodconverter,openoffice文档转换pdf 所需jar包

热门文章

  1. 世界道路协会PIARC发布《智能道路分类》研究报告
  2. 单商户商城系统功能拆解51—应用中心—评价助手
  3. xposed框架android9.0,安卓框架虚拟机VirtualXposed v0.17.1 清爽版 支持安卓9.0系统
  4. lm2776dbvr_收购LM5007MM大量回收LM2776DBVR
  5. 八年级使用计算机的教案,苏科版信息技术八年级1.2.2《用计算机制作逐帧动画》教案1.doc...
  6. 如何增加移动应用程序中的用户保留
  7. 如何将录音转换成文字?实现录音转文字简单方法介绍
  8. lisp地物代码_调土地地类代码表
  9. Using UVAtlas (Direct3D 9) 翻译
  10. 保险业务与系统——LOMA 290 保险公司运营——第八讲——产品销售