牛客周赛 Round 28 F

在这里插入图片描述
以后需要使用map,set进行二分,并且需要知道二分位置的信息时,不妨考虑使用树状数组进行维护
因为简单版本保证了每个数都为正整数,所以前缀和保证了一定的递增的,即有序的,那么考虑固定左端点,去枚举右端点,用二分去找到第一个合法的位置,那么从该位置到数组结尾,一直为合法的,或者使用双指针进行维护也行。
基于简单版本的思想,那么对于区间问题,我们同样考虑去固定一个端点,去维护另外一个,又因为 a i a_i ai可能为负数,所以前缀和不保证单调性了,不能采用二分的方法,此时想到,我们对于每个右端点,我去计算其对应左端点的贡献即可,那么我每遍历一个位置,我就把该位置的前缀和放入一个数据结构中,该结构必须保证有序,这样对于当前位置,我一样可以使用二分该数据结构,然后找到合法的位置,一开始在考虑map,set之类,但这种虽说支持二分,但是不支持下标访问,即我无法知道对于合法位置之前有多少个数,这时候就该树状数组登场了,因为这题数据范围过大,所以需要先进行离散化,树状数组中插入该前缀和所在的位置即可,树状数组的查询同样是log级别,至此此题结束。

#include <bits/stdc++.h>using namespace std;
const int N = 5e5+ 5;
typedef long long ll;
typedef pair<ll, ll> pll;
typedef array<int, 4> ar;
int mod = 998244353;
const int maxv = 4e6 + 5;
// #define endl "\n"struct MIT
{
ll tr[N];
int lowbit(int x) {return x & (-x);
}void add(int u, int v) {for (int i = u; i < N; i += lowbit(i)) {tr[i] += v;}
}ll query(int x) {ll res = 0;for (int i = x; i > 0; i -= lowbit(i)) {res += tr[i];}return res;
}
};MIT tr;void solve() 
{ll n,k;cin>>n>>k;vector<ll> a(n+5),s(n+5);for(int i=1;i<=n;i++) cin>>a[i];vector<ll> p;for(int i=1;i<=n;i++) {s[i]=s[i-1]+a[i];p.push_back(s[i]);p.push_back(s[i]-k);}p.push_back(0);ll ans=0;sort(p.begin(),p.end());p.erase(unique(p.begin(),p.end()),p.end());int t=lower_bound(p.begin(),p.end(),0)-p.begin()+1;tr.add(t,1);for(int i=1;i<=n;i++){ll tar=s[i];int t=lower_bound(p.begin(),p.end(),tar)-p.begin()+1;tr.add(t,1);int pos=lower_bound(p.begin(),p.end(),s[i]-k)-p.begin()+1;
//         cout<<tr.query(pos)<<endl;ans+=tr.query(pos);}cout<<ans<<endl;}    int main() 
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;t=1;// cin>>t;while(t--){solve();}system("pause");return 0;
}

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

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

相关文章

多线程并发与并行

&#x1f4d1;前言 本文主要是【并发与并行】——并发与并行的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&…

自动化测试理论(1)—概述需要掌握的内容

要在自动化测试领域取得成功&#xff0c;需要掌握一系列技能和概念。以下是一些关键的内容&#xff1a; 编程语言&#xff1a; 了解并精通至少一种编程语言&#xff0c;如Python&#xff0c;Java&#xff0c;JavaScript等。编写自动化测试脚本通常需要编程技能。 自动化测试框…

SpringBoot3

有用的新特性 JDK8-19 新增了不少新特性&#xff0c;这里我们把实际常用的新特性&#xff0c;给大家介绍一下。包括以下几个方面&#xff1a; Java RecordSwich 开关表达式Text Block 文本块var 声明局部变量sealed 密封类 Java14 中预览的新特性叫做 Record &#xff0c;在…

explorer.exe 作用

Explorer.exe是什么 在Windows操作系统中&#xff0c;Explorer.exe是桌面进程的意思&#xff0c;它负责显示用户桌面信息&#xff0c;如果用户将它结束掉就看不到桌面上的任何图标了&#xff0c;相当于Windows操作系统中的人机交互界面&#xff0c;其重要性不言而喻。如果用户发…

【算法笔记】分支限界专题

分支限界 整体结构 本质上感觉还是遍历解树剪枝&#xff0c;但是配合优先队列使用以后可以更好的找到最优解。 例题 P8011 ⾛迷宫 对于迷宫问题&#xff0c;某一节点的关联节点指的是它四个方向上相邻的节点。 要利用flag数组确保不会重复访问。 void bfs(){//1、初始化队…

重写equals方法为什么还要重写hashcode方法?

目录 什么是 hashcode&#xff08;哈希码、散列码&#xff09;&#xff1f; 为什么 equals() 方法要重写&#xff1f; hashCode() 与 equals() 的关系 重写equals方法为什么还要重写hashcode方法&#xff1f; 什么是 hashcode&#xff08;哈希码、散列码&#xff09;&#…

python爬虫之线程与多进程知识点记录

一、线程 1、概念 线程 在一个进程的内部&#xff0c;要同时干多件事&#xff0c;就需要同时运行多个“子任务”&#xff0c;我们把进程内的这些“子任务”叫做线程 是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指…

DAY01_Spring—Spring框架介绍IOCSpring工厂模式

目录 1 什么是框架2 Spring框架2.1 Spring介绍2.2 MVC模型说明2.3 IOC思想2.3.1 问题说明2.3.2 IOC说明 3 Spring IOC具体实现3.1 环境准备3.1.1 关于JDK说明3.1.2 检查JDK环境配置 3.2 创建项目3.3 关于Maven 命令3.3.1 install 命令3.3.2 clean 命令 3.4 添加jar包文件3.4.1 …

flutter使用getx进行数据状态管理,实现页面响应式

无论是什么样的应用&#xff0c;都还是需要最基础的数据来支撑的&#xff0c;而且不同的页面之间可能需要共享数据状态&#xff0c;这就显得数据状态管理非常有必要了。因为我这里使用了get依赖库&#xff0c;所以就可以直接在项目中使用getx来管理状态&#xff0c;不想再使用别…

【笔记】软件下载链接汇总

&#x1f388;欢迎加群交流&#x1f388; ✨✨✨https://ling71.cn/hmf.jpg✨✨✨ 浏览器历史版本下载 Firefox史版本下载&#xff1a;&#xff08;官网&#xff09; http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ Chrome历史版本、ChromeDriver历史版本&#x…

服务器机房上架交付流程

服务器上架交付 服务器到货验收后&#xff0c;会进行机房机房上架&#xff0c;完成重装系统、网络配置后交付使用 1、到货验收 采购服务器到货后&#xff0c;会联合多部门进行SN、配置、数量等多方面验收&#xff0c;如数量是否匹配&#xff0c;配置是否相符等也会拆开机箱看看…

Python基础知识:整理10 异常相关知识

1 异常的捕获 1.1 基础写法 """基本语法&#xff1a;try:可能发生错误的代码except:如果出现异常&#xff0c;将执行的代码""" try:fr open("D:/abc.txt", "r", encoding"utf-8") except:print("出现异常…

APM传感器校准

文章目录 前言一、校准加速度计二、校准罗盘三、校准陀螺仪四、校平地平线 前言 固件&#xff1a;rover 4.2.3 地面站&#xff1a;独家汉化版QGC 一、校准加速度计 点击左上角软件图标-》载具设置-》传感器-》加速度计 飞控方向默认为None即可&#xff0c;点击确定 点击确…

德语怎么翻译,中文翻译成德文有何要求?

近年来&#xff0c;随着中德之间的贸易往来日益频繁&#xff0c;德语翻译需求在市场上持续升温。那么&#xff0c;如何做好德语翻译&#xff0c;特别是将中文翻译成德文需要注意哪些要求呢&#xff1f; 首先&#xff0c;深入理解中文原文的语境和含义至关重要。中文含蓄且抽象&…

存储的基本架构

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、存储的需求背景二、自下而上存储架构总结 一、存储的需求背景 1、人的身份信息需要存储 这种信息可以用关系型数据库&#xff0c;例如mysql&#xff0c;那种表…

c++的宏举例和理解

宏提供了一种机制&#xff0c;能够使你在编译期替换代码中的符号或者语句。当你的代码中存在大量相似的、重复的代码时&#xff0c;使用宏可以极大的减少代码量&#xff0c;便于书写。 // 定义圆周率 #define PI 3.14159265 // 定义一个空指针 #define NULL ((void*)0) // 定…

第十二章 Java内存模型与线程(二)

文章目录 12.4 Java与线程12.4.1 线程的实现12.4.2 Java线程调度12.4.3 状态转换 12.4 Java与线程 12.4.1 线程的实现 实现线程主要有三种方式&#xff1a;使用内核线程实现&#xff08;1&#xff1a; 1 实现&#xff09;&#xff0c;使用用户线程实现&#xff08;1&#xff…

CMake入门教程【高级篇】自定义的构建命令add_custom_command

文章目录 1.概述信息2.命令作用3.完整代码示例4. 实际使用中的技巧1.概述信息 add_custom_command是一个非常强大的工具,它允许用户定义在构建过程中执行的自定义命令。这可以用于生成源文件、执行前后处理步骤、自动化测试等。 #mermaid-svg-9icMsOnoxbNTRCu0 {font-family:…

A Charming Algorithm for Count-Distinct

如何估计不重复元素的个数 本文提出一种很有趣的算法&#xff0c;估计一个数列里面不重复元素的个数&#xff0c;关键是它只使用指定大小的内存。 I recently came across a paper called Distinct Elements in Streams: An Algorithm for the (Text) Book by Chakraborty,…

FFmpeg 入门

1. 编译 参考文档&#xff1a;FFmpeg编译和集成(FFmpeg开发基础知识)&#xff0c;重点注意这句话&#xff1a; 在MSYS2 Packages可以查到云仓库有哪些包&#xff0c;直接安装可节约大量时间。 注意&#xff1a;这个路径可自定义 吐槽 在看到这篇文章之前&#xff0c;花了大…