当前位置: 首页 > news >正文

【出行计划 / 2】

题目


在这里插入图片描述



思路

暴力 O ( m ⋅ n ) O(m \cdot n) O(mn) \;\;\;\;\; 不可行

树状数组+差分 O ( m ⋅ l o g ( 5 e 5 ) ) O(m \cdot log(5e^{5})) O(mlog(5e5)) \;\;\;\;\; 可行

具体思路:

  1. t [ i ] ∈ [ q + k − c [ i ] + 1 , q + k ] t[i] \in [q+k-c[i]+1, \;q+k] t[i][q+kc[i]+1,q+k] 转换为 q + k ∈ [ t [ i ] − c [ i ] + 1 , t [ i ] ] q + k \in [t[i]-c[i]+1, \;t[i]] q+k[t[i]c[i]+1,t[i]]
  2. 为了使得范围不存在负数: q + k + 2 e 5 ∈ [ t [ i ] − c [ i ] + 1 + 2 e 5 , t [ i ] + 2 e 5 ] q+k+2e^{5}\in [t[i]-c[i]+1+2e^{5}, \;t[i]+2e^{5}] q+k+2e5[t[i]c[i]+1+2e5,t[i]+2e5]
  3. 预处理:对于每个出行计划,将映射到的范围的值通过 O ( 1 ) 时间 O(1)\;时间 O(1)时间 的差分操作 + 1 +1 +1
  4. 区间求和:最后对于每次询问,直接用树状数组的 q u e r y 函数 query函数 query函数 O ( l o g n ) 时间 O(logn)\;时间 O(logn)时间 求出该点处的实际值
  5. 确定树状数组大小: 存在操作 q u e r y ( q + k + 2 e 5 ) , M = 5 e 5 query(q + k + 2e^{5}), M = 5e^{5} query(q+k+2e5)M=5e5


TLE代码


#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int t[N], c[N];
int n, m, k;
int main()
{cin >> n >> m >> k;for(int i = 1; i <= n; i++) cin >> t[i] >> c[i];while (m -- ){int q;cin >> q;q += k;int cnt = 0;int l = q;for(int i = 1; i <= n; i++){int r = l + c[i] - 1;if(t[i] >= l && t[i] <= r) cnt++;}cout << cnt << endl;}return 0;
}


正确代码


#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10, M = 5e5+10;
int t[N], c[N];
int n, m, k;
int b[M];
int lowbit(int x)
{return x & -x;
}
void update(int x, int d)
{for(; x < M; x += lowbit(x)) b[x] += d;
}
int query(int x)
{int retval = 0;for(; x; x -= lowbit(x)) retval += b[x];return retval;
}
void add(int l, int r, int d)
{update(l, d);update(r+1, -d);
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m >> k;for(int i = 1; i <= n; i++){cin >> t[i] >> c[i];add(t[i]-k-c[i]+1+3e5, t[i]-k+3e5, 1);}while(m--){int q;cin >> q;cout << query(q+3e5) << endl;}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 在SpringMVC中用fmt标签实现国际化/多语言
  • Express与SQLite集成教程:轻松实现数据库操作
  • 每周12600元奖金池,邀你与昇腾算力共舞,openMind开发者盛宴启幕!
  • 专利申请全攻略:一步一步详解申请流程
  • “Flash闪存”介绍 及 “SD NAND Flash”产品的测试含例程
  • 手撕Python之散列类型
  • n*n矩阵,输出矩阵中任意两点之间所有路径
  • 代码随想录第六天|454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
  • Unity数据持久化 之 二进制存储法
  • 企业微信dll,最新版dll
  • 快速掌握GPTEngineer:用AI创建网页应用的实用教程
  • Pandas 1- 创建文件
  • 网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了。
  • 个人怎么注册商标需要什么条件!
  • 局域网通信时,解决在一些设备上NsdManager发现服务失败的问题
  • [PHP内核探索]PHP中的哈希表
  • 【391天】每日项目总结系列128(2018.03.03)
  • 4个实用的微服务测试策略
  • Elasticsearch 参考指南(升级前重新索引)
  • Fabric架构演变之路
  • Javascript Math对象和Date对象常用方法详解
  • magento 货币换算
  • Python语法速览与机器学习开发环境搭建
  • React-Native - 收藏集 - 掘金
  • select2 取值 遍历 设置默认值
  • unity如何实现一个固定宽度的orthagraphic相机
  • 阿里云前端周刊 - 第 26 期
  • 初识 beanstalkd
  • 开源地图数据可视化库——mapnik
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 批量截取pdf文件
  • 前端js -- this指向总结。
  • 入口文件开始,分析Vue源码实现
  • 使用 Docker 部署 Spring Boot项目
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 通过git安装npm私有模块
  • 通过npm或yarn自动生成vue组件
  • 小李飞刀:SQL题目刷起来!
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 在Mac OS X上安装 Ruby运行环境
  • 正则与JS中的正则
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​io --- 处理流的核心工具​
  • #控制台大学课堂点名问题_课堂随机点名
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (二十四)Flask之flask-session组件
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (每日一问)基础知识:堆与栈的区别
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (四)模仿学习-完成后台管理页面查询
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models