P9912 题解

news/2024/9/21 11:32:06/文章来源:https://www.cnblogs.com/Running-a-way/p/18423757

P9912 [COCI 2023/2024 #2] Zatopljenje - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

线段树。

离线处理询问,将询问的高度从大到小排序,每次往线段树中加入高度大于当前询问高度的点,然后做一遍区间连续段个数就可以了。code:

#include <bits/stdc++.h>  
using namespace std;  const int N = 200010;  
int n, q; struct Node { int id, h; } a[N];  
struct Questions {  
    int l, r, h, id, ans;  
} b[N];  struct SgT {  
    int res;  
    bool l1, r1;  
    SgT() {res = l1 = r1 = 0;}  
} T[N * 4];  
#define ls(k) (k << 1)  
#define rs(k) (k << 1 | 1)  
void pushup(SgT& a, SgT son1, SgT son2) {  
    a.res = son1.res + son2.res - (son1.r1 && son2.l1);  
    a.l1 = son1.l1, a.r1 = son2.r1;  
}  
void update(int l, int r, int k, int x) {  
    if(l == r) {  
        T[k].l1 = T[k].r1 = 1, T[k].res = 1;  
        return;  
    }     int mid = (l + r) / 2;  
    if(x <= mid) update(l, mid, ls(k), x);  
    else update(mid + 1, r, rs(k), x);  
    pushup(T[k], T[ls(k)], T[rs(k)]);  
}  
SgT query(int l, int r, int k, int L, int R) {  
    if(L <= l && r <= R) return T[k];  
    int mid = (l + r) / 2; SgT son1, son2; bool b1 = 0, b2 = 0;  
    if(L <= mid) son1 = query(l, mid, ls(k), L, R), b1 = 1;  
    if(mid < R) son2 = query(mid + 1, r, rs(k), L, R), b2 = 1;  
    if(b1 and b2) {  
        SgT res; pushup(res, son1, son2);  
        return res;  
    } else if(b1) return son1;  
    else return son2;  
}  int main() {  
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);  
    cin >> n >> q;  
    for (int i = 1; i <= n; i++) cin >> a[i].h, a[i].id = i;  
    sort(a + 1, a + 1 + n, [](Node x, Node y) {return x.h > y.h;});  
    for (int i = 1; i <= q; i++) cin >> b[i].l >> b[i].r >> b[i].h, b[i].id = i;  
    sort(b + 1, b + 1 + q, [](Questions x, Questions y) {return x.h > y.h;});  
        int pos = 1;  
    for (int i = 1; i <= q; i++) {  
        while(a[pos].h > b[i].h) update(1, n, 1, a[pos].id), pos++;  
        b[i].ans = query(1, n, 1, b[i].l, b[i].r).res;  
    }  
    sort(b + 1, b + 1 + q, [](Questions x, Questions y){return x.id < y.id;});  
    for (int i = 1; i <= q; i++) cout << b[i].ans << '\n';  
    return 0;  
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

帝国cms刷新首页空白怎么办

当帝国CMS刷新首页后出现空白的情况时,这可能是由多种原因造成的。以下是一些常见的解决方法: 1. 检查数据库连接 确保数据库连接正常。 解决方法:检查数据库配置:打开e/config/config.php文件,确认数据库连接信息(如主机名、用户名、密码、数据库名)正确。 测试数据库连…

manim边学边做--空心多边形

空心的多边形Cutout是一种比较特殊的多边形,主要用于解决与形状、大小、位置等相关的数学问题。 Cutout多边形可以定义物体表面的空洞或凹陷部分,从而更准确地模拟现实世界中的复杂形状。 比如,在PCB(印制电路板)设计中,通过放置Cutout空心的多边形,设计师可以精确地控制…

Apache-Shiro =1.2.4 反序列化漏洞 (代码审计)

一、Apache Shiro 简介: Apache Shiro提供了认证、授权、加密和会话管理功能,将复杂的问题隐藏起来,提供清晰直观的API使开发者可以很轻松地开发自己的程序安全代码。并且在实现此目标时无须依赖第三方的框架、容器或服务,当然也能做到与这些环境的整合,使其在任何环境下都…

帝国cms安装时配置数据库出现错误

在安装帝国CMS时配置数据库出现错误,可能是由于多种原因造成的。以下是一些常见的解决方法,帮助你解决安装过程中遇到的数据库配置错误: 1. 检查数据库连接信息 确保数据库连接信息正确无误。 解决方法:数据库服务器地址:确保输入的数据库服务器地址正确。 数据库用户名和…

帝国cms安装时的出现的错误怎么解决

在安装帝国CMS时遇到错误,可以根据错误的具体情况采取不同的解决措施。以下是一些常见的错误及其解决方法: 1. HTTP 500 内部服务器错误 如果在安装过程中遇到HTTP 500错误,这通常意味着服务器端发生了错误。 解决方法:查看错误日志:登录到服务器,找到帝国CMS安装目录下的…

帝国cms时间显示为1970-01-01

当帝国CMS中的时间显示为1970-01-01时,通常是因为系统中的时间字段没有被正确设置或更新。以下是解决此问题的一些方法: 1. 检查字段设置 确保在建立系统模型时,时间字段(如newstime)已经被设置为可录入、可修改和可增加。 解决方法:在帝国CMS后台,进入“系统” -> “…

谷歌收录查询工具,Google收录查询工具操作教程

谷歌收录查询工具是帮助网站所有者或SEO专业人士了解网站在谷歌搜索引擎中收录情况的重要工具。以下是一些常用的Google收录查询工具及其操作教程: 一、Google Search Console(谷歌搜索控制台) 功能概述: Google Search Console是一个免费的服务,它帮助网站所有者监控和管…

谷歌网站收录查询,谷歌网站收录查询有那些办法

谷歌网站收录查询是SEO优化和网站管理中的重要一环,以下是几种常用的谷歌网站收录查询办法:使用Google Search Console(谷歌搜索控制台) 优点: 官方工具,数据准确可靠。 提供详细的收录情况报告,包括已收录和未收录的页面列表。 可用于提交网站地图,帮助谷歌爬虫更快地…

解决帝国CMS栏目绑定域名刷新问题的八种方法

解决帝国CMS栏目绑定域名刷新问题时,可以从以下几个方面入手: 1. 检查域名解析问题 确保域名已经正确解析到了服务器的IP地址。 解决方法:使用ping命令或者DNS查询工具检查域名是否正确解析到了服务器IP地址。shping yourdomain.com如果域名未正确解析,检查DNS设置或者联系…

迭代器可能的报错:ConcurrentModificationException(并发修改异常)注意事项

参考: ConcurrentModificationException(并发修改异常)可能原因和解决方法 Java迭代器详解,看这一篇就够了 JAVA iterator迭代器遍历一遍后不能再遍历了吗 迭代器循环list 集合的顶层接口Collection继承Iterable接口,实现迭代器iterator()迭代器一旦定义,不允许其他地方对…

PTA 周初浪型

考虑黄圈的时机做多一下:

iis服务器帝国cms7.5编辑器不能使用解决办法

在IIS服务器上使用帝国CMS 7.5时,如果编辑器不能正常使用,可能涉及多个方面的问题,包括文件权限、配置文件、依赖库等。下面是一些具体的解决办法: 1. 检查文件和目录权限 确保帝国CMS的所有必要文件和目录具有正确的权限。 步骤:检查e/data目录及其子目录:使用IIS Manag…