【枚举区间+线段树】CF Ehu 152 E

Problem - E - Codeforces

题意:

思路:

感觉是个套路题

对区间计数,按照CF惯用套路,枚举其中一个端点,对另一个端点计数

对于这道题,枚举右端点,对左端点计数

Code:

#include <bits/stdc++.h>

#define int long long

using i64 = long long;

constexpr int N = 1e6 + 10;
constexpr int M = 1e6 + 10;
constexpr int P = 2600;
constexpr i64 Inf = 1e18;
constexpr int mod = 1e9 + 7;
constexpr double eps = 1e-6;

struct Segtree {
    int val, lazy;
}tr[N << 2];

int n;
int a[N];
int lmi[N], lmx[N];

void pushup(int rt) {
    tr[rt].val = tr[rt << 1].val + tr[rt << 1 | 1].val;
}
void build(int rt, int l, int r) {
    if (l == r) {
        tr[rt].val = 0;
        tr[rt].lazy = -1;
        return;
    }
    int mid = l + r >> 1;
    build(rt << 1, l, mid);
    build(rt << 1 | 1, mid + 1, r);
    pushup(rt);
}
void pushdown(int rt, int tot) {
        tr[rt << 1].lazy = tr[rt].lazy;
        tr[rt << 1 | 1].lazy = tr[rt].lazy;
        tr[rt << 1].val = (tot - tot / 2) * (tr[rt].lazy? 1 : 0);
        tr[rt << 1 | 1].val = (tot / 2) * (tr[rt].lazy? 1 : 0);
        tr[rt].lazy = -1;
}
void modify(int rt, int l, int r, int x, int y, int k) {
    if (x <= l && r <= y) {
        tr[rt].lazy = k;
        tr[rt].val = k * (r - l + 1);
        return;
    }
    if (tr[rt].lazy != -1) pushdown(rt, r - l + 1);
    int mid = l + r >> 1;
    if (x <= mid) modify(rt << 1, l, mid, x, y, k);
    if (y > mid) modify(rt << 1 | 1, mid + 1, r, x, y, k);
    pushup(rt);
}
void solve() {
    std::cin >> n;
    for (int i = 1; i <= n; i ++) {
        std::cin >> a[i];
    }

    std::stack<int> S, S2;
    for (int i = 1; i <= n; i ++) {
        while(!S.empty() && a[S.top()] >= a[i]) S.pop();
        lmi[i] = S.empty() ? 0 : S.top();
        S.push(i);
    }

    for (int i = 1; i <= n; i ++) {
        while(!S2.empty() && a[S2.top()] <= a[i]) S2.pop();
        lmx[i] = S2.empty() ? 0 : S2.top();
        S2.push(i);
    }

    build(1, 1, n);

    int ans = 0;
    for (int r = 1; r <= n; r ++) {
        if (lmi[r] + 1 <= r - 1) modify(1, 1, n, lmi[r] + 1, r - 1, 0);
        if (lmx[r] + 1 <= r - 1) modify(1, 1, n, lmx[r] + 1, r - 1, 1);
        ans += tr[1].val;
    }

    std::cout << ans << "\n";
}
signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int t = 1;

    while (t--) {
        solve();
    }
    
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/99509.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

go语言配置

1、Go语言的环境变量 与Java等编程语言一样&#xff0c;安装Go语言开发环境需要设置全局的操作系统环境变量&#xff08;除非是用包管理工具直接安装&#xff09; 主要的系统级别的环境变量有两个: &#xff08;1&#xff09;GOROOT&#xff1a;表示Go语言环境在计算机上的安…

Linux测开常用命令总结

文章目录 Linux系统中文件目录树 基本指令的使用&#xff1a; Linux命令的帮助信息查看 --help command --help 说明&#xff1a; 显示command 命令的帮助信息通过man命令查看帮助信息 man command( 命令的名称) man 命令查看的帮助信息更加详细ls&#xff0c;pwd&#xff0c…

分享一套全开源无加密海外跨境商城源码

武汉一一零七科技有限公司&#xff0c;作为一家专注于海外跨境电商领域的公司&#xff0c;为广大商家提供了一套全新的海外跨境商城源码。该源码融合了多年来我们对于海外市场的深入研究和积累&#xff0c;致力于帮助商家拓展海外市场&#xff0c;提升销售额。 这套海外跨境商城…

完整开发实现公众号主动消息推送,精彩内容即刻到达

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

Samba服务器

目录 一、什么是Samba&#xff1f; 二、Samba进程 三、Samba主要功能 四、Samba工作流程 五、Samba安全级别 六、Sam主配置文件/etc/samba/smb.conf 七、Samba服务配置案例 一、什么是Samba&#xff1f; Samba可以让linux计算机和windows计算机之间实现文件和打印机资源共享的一…

【Terraform学习】使用 Terraform创建 S3 存储桶事件(Terraform-AWS最佳实战学习)

本站以分享各种运维经验和运维所需要的技能为主 《python》&#xff1a;python零基础入门学习 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…

数据库设计的六个基本步骤

按照规范设计的方法&#xff0c;考虑数据库及其应用系统开发全过程&#xff0c;可将数据库设计分为以下6个阶段&#xff0c;分别为&#xff1a; 1.需求分析&#xff0c; 2.概念结构设计&#xff0c; 3.逻辑结构设计&#xff0c; 4.物理结构设计&#xff0c; 5.数据库实施&…

VB:百元买百鸡问题

VB&#xff1a;百元买百鸡问题 Private Sub Command1_Click()ClsRem 百元买百鸡问题Print "公鸡", "母鸡", "小鸡"For x 0 To 20For y 0 To 33z 100 - x - yIf z Mod 3 0 ThenIf 5 * x 3 * y z / 3 100 ThenPrint x, y, zEnd IfEnd IfNe…

二维数组创建方式比较

暑假跟着地质队去跑山了&#xff0c;到现在还没结束&#xff0c;今天休息的时候突然刷到了一篇关于C二维数组创建方面的文章&#xff0c;我觉得还是非常不错滴&#xff0c;就将其中提到的新方法和我已经使用过的三种方法进行了比较&#xff0c;发现该方法提高了二维数组的分配、…

学习记录——Efficient MOdel轻量化主干模型(iRMB、EMO)、CATnet

Rethinking Mobile Block for Efficient Attention-based Models 结合 CNN 和 Transformer 的倒残差移动模块设计 ICCV-2023 实例化了一个面向移动端应用的iRMB基础模块&#xff08;Inverted Residual Mobile Block&#xff0c;倒残差移动模块&#xff09;&#xff0c;其同时具…

机器学习——KNN回归

1、前提知识&#xff1a; 回归&#xff1a;可以理解为拟合&#xff0c;就是根据训练数据的趋势&#xff0c;对输入数据进行预测。KNN回归&#xff1a;是一种有监督学习&#xff0c;因为需要提供目标数据&#xff08;target&#xff09; 2、案例&#xff1a; 用KNN回归拟合sin…

交换机介绍

什么是交换机&#xff1f; 交换机&#xff0c;英文名称为Switch&#xff0c;也称为交换式集线器&#xff0c;它是一种基于MAC地址(网卡的硬件地址)识别&#xff0c;能够在通信系统中完成信息交换功能的设备。 交换机的工作特点 拥有一条很高带宽的背板总线和内部交换矩阵 所有…

金蝶云星空二开,公有云执行SQL

功能背景&#xff1b; 金蝶公有云执行sql工具&#xff0c;因官方为云部署 用户无法连接数据库增删改查 天梯维护网页仅支持增删改操作 二开单据已支持根据sql动态生成单据体 与sql可视化界面操作一致 功能实现及场景&#xff1a; 1.可用于公有云执行sql类操作 2.私有云部署&am…

pyqt5-快捷键QShortcut

import sys from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import *""" 下面示例揭示了&#xff0c;当关键字绑定的控件出现的时候&#xff0c;快捷键才管用&#xff0c; 绑定的控件没有出现的时候快捷键无效 """…

DRM全解析 —— CREATE_DUMB(3)

接前一篇文章&#xff1a;DRM全解析 —— CREATE_DUMB&#xff08;2&#xff09; 本文参考以下博文&#xff1a; DRM驱动&#xff08;三&#xff09;之CREATE_DUMB 特此致谢&#xff01; 上一回讲解了drm_mode_create_dumb函数的前半部分&#xff0c;本回讲解余下的部分。 为…

出现ZooKeeper JMX enabled by default这种错误的解决方法

系列文章专栏 学习以来遇到的bug/问题专栏 文章目录 系列文章专栏 前言 一 问题描述 二 解决方法 2.1 可能的原因分析 2.2 小编的问题解决方法 First&#xff1a;检查/etc/profile里面zookeeper的环境变量配置 Second&#xff1a;检查 zookeeper/conf/zoo.cfg里面的d…

如何利用 Instagram Stories 促进小型企业发展

图片来源&#xff1a;SaleSmartly官网 社交媒体的存在对于小型企业来说是必须的。最近的一项研究表明&#xff0c;大约 80% 的客户在向小型企业购买产品之前会进行在线研究&#xff0c;超过 60% 的小型企业投资社交媒体营销以提供相关信息并吸引客户。 流行的社交媒体平台多种多…

CVE-2023-23752:Joomla未授权访问漏洞复现

CVE-2023-23752&#xff1a;Joomla未授权访问漏洞复现 前言 本次测试仅供学习使用&#xff0c;如若非法他用&#xff0c;与本文作者无关&#xff0c;需自行负责&#xff01;&#xff01;&#xff01; 一.Openfire简介 Joomla是一个免费的开源内容管理系统&#xff08;CMS&a…

如何让qt tableView每个item中个别字用不同颜色显示?

如何让qt tableView每个item中个别字用不同颜色显示&#xff1f; 从上面图片可以看到&#xff0c;Item为红色&#xff0c;数字5为黑色。 要实现在一个控件实现不同颜色&#xff0c;目前想到的只有QTextEdit 、QLabel。有两种方法&#xff0c;第一种是代理&#xff0c;第二种是…

Midjourney学习(一)prompt的基础

prompt目录 sd和mj的比较prompt组成风格表现风格时代描述表情色彩情绪环境 sd和mj的比较 自从去年9月份开始&#xff0c;sd就变得非常或火&#xff0c;跟它一起的还有一个midjourney。 他们就像是程序界的两种模式&#xff0c;sd是开源的&#xff0c;有更多的可能性更可控。但是…