首页 > 其他分享 >H. 3.魔法传输

H. 3.魔法传输

时间:2023-08-23 19:11:32浏览次数:31  
标签:qr rs int 魔法 mid update 传输 ql

H. 3.魔法传输

这道题是区间加上等差数列的修改,我们直接去修改会很难想

然后我们可以发现他这个只有单点查询,所以我们就可以这么想,类似于一个差分操作

我们在每一次操作的时候我们就直接将这个区间都加上一,然后再将右端点的后一位减去区间长度

对于每一次单点查询我们就直接对这个点进行前缀和操作即可。

#include <bits/stdc++.h>
#define ls p << 1
#define rs p << 1 | 1
using namespace std;
typedef long long ll;

const int N = 4e5 + 10, mod = 1e9 + 7;
ll sum[N], add[N], n, m;

void pushup(int p)
{
    sum[p] = (sum[ls] + sum[rs]) % mod;
}

void pushdown(int p, int len)
{
    if (add[p])
    {
        add[ls] += add[p];
        add[rs] += add[p];
        sum[ls] += add[p] * (len - (len >> 1));
        sum[ls] %= mod;
        sum[rs] += add[p] * (len >> 1);
        sum[rs] %= mod;
        add[p] = 0;
    }
}

void update(int p, int l, int r, int ql, int qr, ll k)
{
    if (ql <= l && r <= qr)
    {
        add[p] += k;
        sum[p] += k * (r - l + 1);
        sum[p] %= mod;
        return;
    }
    pushdown(p, r - l + 1);
    int mid = (l + r) >> 1;
    if (ql <= mid)
        update(ls, l, mid, ql, qr, k);
    if (qr > mid)
        update(rs, mid + 1, r, ql, qr, k);
    pushup(p);
}

ll query(int p, int l, int r, int ql, int qr)
{
    if (ql <= l && r <= qr)
        return sum[p];
    pushdown(p, r - l + 1);
    ll res = 0;
    int mid = (l + r) >> 1;
    if (ql <= mid)
        res = (res + query(ls, l, mid, ql, qr)) % mod;
    if (qr > mid)
        res = (res + query(rs, mid + 1, r, ql, qr)) % mod;
    return res;
}

char op[2];
int main()
{
    cin >> n >> m;
    while (m--)
    {

        int x, y;
        cin >> op;
        if (op[0] == 'Q')
        {
            cin >> x;
            cout << query(1, 1, n, 1, x) << endl;
        }
        else
        {
            cin >> x >> y;
            update(1, 1, n, x, y, 1);
            update(1, 1, n, y + 1, y + 1, -(y - x + 1));
        }
    }
    return 0;
}

标签:qr,rs,int,魔法,mid,update,传输,ql
From: https://www.cnblogs.com/ljfyyds/p/17652555.html

相关文章

  • 解密Nginx的高性能魔法:事件驱动与异步非阻塞模型
    在现代的Web服务架构中,Nginx已成为不可或缺的一部分,以其出色的性能和高效的事件驱动异步非阻塞模型而闻名。本文将深入探讨Nginx的工作原理,重点介绍其事件驱动与异步非阻塞模型,以及如何利用这些特性来实现高性能的后端服务。Nginx的事件驱动与异步非阻塞模型事件驱动模型Nginx使用......
  • Java 魔法类Unsafe详解
    Java魔法类Unsafe详解本文整理完善自下面这两篇优秀的文章:Java魔法类:Unsafe应用解析-美团技术团队-2019openinnewwindowJava双刃剑之Unsafe类详解-码农参上-2021​ 阅读过JUC源码(JUC就是Java.util.concurrent包,他是一个处理线程的工具包,从jdk1.5之后开......
  • Python基础入门学习笔记 048 魔法方法:迭代器
    迭代的意思类似于循环,每一次重复的过程被称为一次迭代的过程,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。提供迭代方法的容器称为迭代器(如序列(列表、元组、字符串)、字典等)。对一个容器对象调用iter()就得到它的迭代器,调用next()迭代器就会返回下一个值。入托迭代器没......
  • Python基础入门学习笔记 041 魔法方法:构造和析构
     __init__(self[,...]) 方法是类在实例化成对象的时候首先会调用的一个方法1>>>classRectangle:2def__init__(self,x,y):3self.x=x4self.y=y5defgetPeri(self):6return(self.x+self.y)*27defgetArea......
  • 直播APP开发,协议盘点(五):实时传输协议RTP
    简介:在直播APP开发的过程中,搭建协议实现相应的功能是开发重点之一,而直播APP开发的协议是繁多且复杂的,所以从前段时间开始,我做了直播开发的协议篇,到今天为止我已经分享了四个协议,下面我为大家分享第五个协议:实时传输协议RTP。  一、实时传输协议RTP介绍:RTP协议又称为实时传......
  • 直播平台源码搭建协议讲解篇:传输控制协议TCP
    简介:由于直播平台在当今时代发展的越来越迅速,使得直播平台的技术功能越来越智能,让用户在直播平台中能够和其他用户进行实时互动,让用户可以获取到全世界最新的资讯,让一些用户可以作为主播获得工作,让另一些用户作为观众获得放松快乐等,所以直播平台源码搭建也成为了众多创业者想要涉......
  • 为啥网线都会限制传输距离为100米?
    下午好,我的网工朋友。大部分网工都经历过网络布线这件事儿吧。无论是五类双绞线,还是六类双绞线,传输距离都是100米。而且,在综合布线规范中,水平布线不能超过90米,链路总长度不能超过100米。换句话说,“100米”是有线以太网布线的一个极限。这个说法到底怎么来的,有啥依据,具体施工现场怎......
  • Java前端上传文件后,将文件传输到后端,并将文件上传到FTP服务器上
    当我们在前端上传文件后,需要将文件传输到后端,并将文件上传到FTP服务器上。在Java中,我们可以使用ApacheCommonsNet库来实现FTP文件上传。下面是一个简单的示例,演示了如何在Java中实现前端上传文件后端接收并上传到FTP服务器的过程。前端上传文件首先,在前端页面中,我们需要一个文件......
  • 手机直播源码开发,协议讨论篇(三):RTMP实时消息传输协议
    一、实时消息传输协议RTMP简介RTMP又称实时消息传输协议,是一种实时通信协议。在当今数字化时代,手机直播源码平台为全球用户进行服务,如何才能增加用户,提升用户黏性?就需要让一对一直播平台能够为用户提供优质的体验。而RTMP协议的部署就能为手机直播源码平台提供出低延迟、高质量的......
  • Streamlit 讲解专栏(八):图像、音频与视频魔法
    1前言欢迎各位读者来到“最全Streamlit教程”专栏系列!如果您正在寻找一种简单而强大的方式来创建交互式数据应用程序,那么Streamlit无疑是您的最佳选择。作为该领域的热门框架,Streamlit让数据科学家、开发者和爱好者能够以前所未有的速度构建出引人入胜的数据可视化工具。专栏名......