首页 > 其他分享 >【出行计划 / 2】

【出行计划 / 2】

时间:2024-09-04 10:25:50浏览次数:5  
标签:出行 int cin 2e5 2e 计划 5e5 query

题目


在这里插入图片描述



思路

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

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

具体思路:

  1. t [ i ] ∈ [ q + k − c [ i ] + 1 ,    q + k ] t[i] \in [q+k-c[i]+1, \;q+k] t[i]∈[q+k−c[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;
}

标签:出行,int,cin,2e5,2e,计划,5e5,query
From: https://blog.csdn.net/m0_73669127/article/details/141859633

相关文章

  • 元气日语 Genki-1 第 10 课 寒假计划
    冬休みの予定课文Iメアリー:寒くなりましたね。たけし:ええ。メアリーさん、冬休みはどうしますか。メアリー:北海道か九州に行くつもりですが、まだ決めていません。たけし:いいですね。メアリー:北海道と九州とどっちのほうがいいと思いますか。たけし:冬は北海......
  • (附论文)基于Springboot和Vue的旅游出行指南系统(615)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述该系统包括个人管理员和用户两部分。同时还能为用户提供一个方便实用的旅游出行指南,使得用户能够及时地找到合适自己的旅游出行信息。个人用户在使用本系统时,可以浏览景点信息,酒店信息,餐厅信息......
  • VI改造计划
    本次准备将Ubuntu自带的VI编辑器打造成适合我们C语言及内核开发时的IDE,先进行基础改造工程,下面是整个改造计划:0.实践环境Ubuntu13.10(64位,Kernel为自已编译的3.13.6),涉及工具及插件有:涉及工具及插件会用到示例的代码片段:#include<stdio.h>voidmain(voi......
  • VI改造计划补充篇
    在《VI改造计划》一文中讲述到了ctags和cscope两个工具,在使用LinuxKernel源码进行实操时需要使用:csaddcscope.out去加载cscope数据库,每次这样操作会让我们抓狂,那我们修改下~/.vimrc吧,在该文件里加入如下内容:iffilereadable("cscope.out") csaddcscope.outendif......
  • Unity面向对象补全计划 之 List<T>与class(非基础)
    C#&Unity面向对象补全计划泛型-CSDN博客关于List,其本质就是C#封装好的一个数组,是一个很好用的轮子,所以并不需要什么特别说明问题描述假设我们有一个表示学生的类 Student,每个学生有姓名和年龄两个属性。我们需要创建一个学生列表,并实现以下功能:添加学生到列表中打印......
  • 海外合规|新加坡网络安全认证计划简介(一)
     新加坡网络安全局(CSA)为组织制定了网络安全认证计划,旨在表彰具有良好网络安全实践的组织。CyberEssentials标志表彰已实施网络卫生措施的组织,而CyberTrust标志则是表彰具有全面网络安全措施和实践的组织的卓越标志。这些标志是可见的指标,表明组织已实施良好的网络安全实践......
  • IT人#摸鱼计划#,5月更文领“露营好物”
     点击查看《5月摸鱼计划领奖名单(2024)》春末夏初,气温适宜,最适合约上三五好友一起去户外露营。5月摸鱼计划为大家准备了两款“露营好物”作为更文福利!快来看看吧!【活动时间】发文时间:2024年5月1日—2024年5月31日【活动任务】以下任务福利可同享!!同时,我们为大家整理了容易被百度收录......
  • 俄罗斯即将启动跨境加密支付试行计划:规避制裁与加密货币的未来
    概述随着全球地缘政治局势的不断变化,俄罗斯在面对日益加剧的国际制裁时,正在探索利用加密货币作为其跨境支付的新手段。俄罗斯政府近日宣布,将于下周开始试行使用加密货币进行跨境支付,这一举措标志着该国在应对国际金融制裁、提升金融主权方面迈出了关键一步。1.背景1.1国......
  • 基于Django的MySQL项目建设计划
    构建一个基于Django和MySQL的项目需要经过多个阶段的规划和实施。以下是一个详细的建设计划,分为项目准备、开发、测试和部署等几个关键阶段。1、问题背景为了完成大学的“问答网站”项目,需要在几天内完成项目的计划,并于下周二准备好代码的第一个版本。项目的最终截止日期约为......
  • 英特尔或将计划剥离资产削减成本
    KlipC报道:有消息称,英特尔正在计划剥离不必要的的业务和调整资本支出以重振公司,其中包括出售可编程芯片部门Altera在内的业务来削减总体成本。其现在正在与投资银行高盛集团和摩根士丹利合作,讨论各种方案。据KlipC了解,为缓解公司的财务压力,今年6月就已经在积极地筹集资金。以110亿......