HDOJ 6464_hdoj 5624-程序员宅基地

技术标签: HDOJ  ACM  C语言基本算法  

先离线,离散化
在线段树维护区间和以及数量

#include <bits/stdc++.h>
using namespace std;

///#pragma GCC optimize(2)

#define Mode 1000000007

const int N = 1<<17;

struct node
{
    long long Sum;
    long long Cnt;
};

struct que
{
    int type;
    long long first;
    long long second;
};

long long Res[1<<17];

que A[1<<17];

node dat[2*N];

long long Date[1<<17];

void Init(void)
{
    for(int i = 0; i  < 2*N; i++)
    {
        dat[i].Sum = 0;
        dat[i].Cnt = 0;
    }
}
void update(int k, long long a)
{
    k += N-1;
    dat[k].Cnt += a;
    dat[k].Sum += ((Date[k-N+1]%Mode)*(a%Mode))%Mode;

    while(k > 0)
    {
        k = k/2;
        dat[k].Cnt = dat[k*2].Cnt + dat[k*2+1].Cnt;
        dat[k].Sum = (dat[k*2].Sum%Mode + dat[k*2+1].Sum %Mode) %Mode;
    }
}

int query(int k, long long b)
{
    if(k >= N && k <= 2*N-1)
        return Date[k - N+1]*b % Mode;

    if(dat[k].Cnt == b)
        return dat[k].Sum % Mode;

    if(dat[k].Cnt < b)
    {
        return (dat[k].Sum%Mode + query(k*2+1, b-dat[k].Cnt)%Mode) %Mode;
    }

    if(dat[k].Cnt > b)
    {
        if(dat[k*2].Cnt >= b)
            return query(k*2, b)%Mode;
        else
            return (dat[k*2].Sum%Mode + query(k*2+1, b-dat[k*2].Cnt)%Mode)%Mode;
    }
}


int q;

int main(void)
{
    freopen("G:\\data.txt", "r", stdin);
    cin >> q;
    int S = 0;

    for(int i = 0; i < q; i++)
    {
        cin >> A[i].type >> A[i].first >> A[i].second;
        if(A[i].type == 1)
        {
            Res[++S] = A[i].second;
        }
    }
    sort(Res+1, Res+S+1);
    S=unique(Res+1,Res+1+S)-(Res+1);
    for(int i = 1; i <= S; i++)
    {
        Date[i] = Res[i]%Mode;
    }
    Init();
    for(int i = 0; i < q; i++)
    {
        if(A[i].type == 1)
        {
            int cc = lower_bound(Res+1, Res+S+1, A[i].second) - Res;
            update(cc, A[i].first);
        }
        else if(A[i].type == 2)
        {
            long long c1 = query(1, A[i].first-1)%Mode;
            long long c2 = query(1, A[i].second);
            long long ANS = (c2 - c1+Mode) % Mode;
            cout << ANS << endl;
        }
    }
    return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/canhelove/article/details/89323393

智能推荐

字典序问题_在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表 a 由 26 个-程序员宅基地

文章浏览阅读1.6w次,点赞11次,收藏39次。在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz等字符串都是升序字符串。现在对字母表中产生的所有长度不超过6的升序字符串,计算它在字典中的编码。123…ab_在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表 a 由 26 个

Spring Security 认证与授权流程_spring security认证和授权流程-程序员宅基地

文章浏览阅读6.6k次,点赞6次,收藏20次。Spring Security 认证与授权流程_spring security认证和授权流程

Flutter 2进阶(八):EventBus、轮播图与沉浸式状态栏_flutter_statusbar_manager-程序员宅基地

文章浏览阅读2.2k次。开发中,必须要用到的也就这三个小插件了。这里主要讲一下 EventBus,轮播图和沉浸式状态栏教程很多并且很简单。下面主要用上面三个实现的功能,b站广告图,沉浸式状态栏,以及点击左上角头像用 eventbus 进入我的页面,效果图如下:下载链接,建议去 CSDN 下载,不要积分,CSDN 是阶段性代码,GitHub 有时忘记传上去:CSDN :flutter_blbl.zip-Android文档类资源-CSDN下载GitHub:https://github.com/wuqingse._flutter_statusbar_manager

ARP实现简单断网攻击_arp断网攻击演示-程序员宅基地

文章浏览阅读2.6k次。ARP实现简单断网攻击环境准备:1:一台kali2:一台win7虚拟机在讲如何进行攻击前,我先来简单介绍下arp(已经有很多大佬的博客把原理写的很清楚了,大家如有需要可以自己详细去看下,这里附上大佬博客:arp攻击arp:地址解析协议,目的是实现IP地址与MAC地址的转换,而MAC地址是真正计算机唯一标识arp攻击则是利用这一特点来进行攻击的,假设B向A发送数据,C就伪造成A,这就造成了劫持数据,造成断网,甚至监听原理大概就是这样了,我就细细讲下攻击过程(原理主要是自己也不太会写,写出来全是口_arp断网攻击演示

Android开发中的错误及解决办法总结_the 'kotlin-android-extensions' gradle plugin is d-程序员宅基地

文章浏览阅读7k次。Android开发中的错误及解决办法总结 _the 'kotlin-android-extensions' gradle plugin is deprecated. please use this

nacos-ErrMsg:failed to req API:/api//nacos/v1/ns/instance after all servers([127.0.0.1:8848]) tried_failed to req api:/nacos/v1/ns/instance after all -程序员宅基地

文章浏览阅读6.6k次。服务注册到nacos报错:ErrMsg:failed to req API:/api//nacos/v1/ns/instance after all servers([127.0.0.1:8848]) tried: server is DOWN now, please try again later!解决办法:_failed to req api:/nacos/v1/ns/instance after all servers([127.0.0.1:8848])

随便推点

华为软件笔试_软件 笔试-程序员宅基地

文章浏览阅读1.8k次。1.n=int(input())mn=[]for i in range(n): aa=[] for j in range(2): line=int(input()) aa.append(line) mn.append(aa)def Last(n, m): if not n or not m: ..._软件 笔试

图解:常用排序算法(冒泡、选择、插入、希尔、快速、归并、堆)_插入排序,归并排序,希尔排序流程图-程序员宅基地

文章浏览阅读1.2k次,点赞4次,收藏19次。插入排序只交换相邻的元素,在大规模乱序情况下,极有可能发生某个元素从某一端逐位交换至另一端,严重影响效率。希尔排序的思路是:先进行远距离跨越交换,从而使得元素尽快靠近最终位置,达到部分有序的目的,然后,再进行插入排序(当H=1时)。:首先,选择一个元素,将其余元素分成三部分,一部分小于该元素,一部分大于该元素,一部分等于该元素。:将完全二叉树的结点,按照层级顺序,将每一层的结点,从左至右放入数组中,且下标从1开始,即根节点的下标为1位置。:不稳定(排序后,相同元素的相对位置可能发生变化)_插入排序,归并排序,希尔排序流程图

【C++】STL之unoerdered_map、unordered_set类源码剖析_unodermap 源码-程序员宅基地

文章浏览阅读2.2k次。C++通过哈希表实现对unordered_map、unordered_set的封装_unodermap 源码

WordPress 阿里云虚拟主机发送邮件配置_阿里云如何设置虚拟邮箱-程序员宅基地

文章浏览阅读1.7k次。本次配置是在wordpress4.9.4上测试第一步:首先需要进入阿里云虚拟主机控制台修改php.ini配置文件,启用一个函数PHP函数fsockopen设置:开启第二步 修改配置文件:/wp-include/class-smtp.php找到以下代码:$this-&gt;smtp_conn = @stream_socket_client($host . “:” . $port,$errno,$er..._阿里云如何设置虚拟邮箱

esp32 io速度_Adafruit HUZZAH32-ESP32Feather的说明-程序员宅基地

文章浏览阅读661次。概述是的,是您一直在等待的羽毛!HUZZAH32是我们基于ESP32的Feather,使用官方WROOM32模块制成。我们打包了您喜欢的所有有关Feathers的东西:内置USB到串行转换器,自动引导程序重置,锂离子/聚合物充电器以及所有带出的GPIO,因此您可以将其与我们的FeatherWings一起使用。位于该Feather末尾的模块包含一个双核ESP32芯片,4MB的SPIFlash,调谐的..._.pio/libdeps/featheresp32/adafruit busio/adafruit_spidevice.h:9:10: fatal er

电商购物核心功能测试点_中慧 电子商城功能测试-程序员宅基地

文章浏览阅读1.4w次,点赞28次,收藏229次。这份是根据电商中所涉及的业务点整理出的核心功能测试点,更多的偏向于功能性的测试。其后所涉及到的性能测试、压力测试、集成测试等,会在进一步分析,作为一名产品经理应该了解到这部分知识点。..._中慧 电子商城功能测试

推荐文章

热门文章

相关标签