首页 > 其他分享 >寒假训练15-BCPC2023finla

寒假训练15-BCPC2023finla

时间:2024-04-28 19:13:18浏览次数:28  
标签:tmp cnt 15 int 寒假 que BCPC2023finla now mod

I. 请问您今天要来点取模吗?

题意:求L-R里所有数经过一系列取模后的值的和

题解:我们考虑一个0-R的区间 经过一次对x的取模,会变成(R+1)/x个 0-(x-1)的区间以及可能会有尾巴上一个不完全的0-R%x的区间

前面这些所有区间可以看成一个一样的东西存在数据结构中,那么q次取模只会产生q个区间,我们用一个优先队列去储存它,每次pop出R最大的区间 然后拆分区间 最后对所有区间进行等差数列求和就行了 复杂度nlogn

代码:

#include<bits/stdc++.h>
#define close std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
typedef long long ll;
const ll MAXN =  3e5+7;
const ll mod = 1e9+7;
const ll inf = 0x3f3f3f3f;
#define int ll
int a[MAXN];
int n;
int calc(int x) {
    if(x<=0) return 0;
    priority_queue<array<int,2>,vector<array<int,2>>> que;
    que.push({x,1});
    for(int i=1; i<=n; i++) {
        int tot=0;
        while(que.size()&&(que.top()[0]>=a[i])) {
            int now=que.top()[0];
            int cnt=que.top()[1];
            int num= (now+1)/a[i];
            que.pop();
            int tmp=num*cnt;
            if(tmp>=mod) tmp%=mod;
            //que.push({a[i]-1,tmp});
            tot+=tmp;
            if(tot>=mod) tot%=mod;
            if(now%a[i]!=a[i]-1) {
                que.push({now%a[i],cnt});
            }
        }
        if(tot)
        que.push({a[i]-1,tot});
    }
    int sum=0;
    while(que.size()) {
        int now=que.top()[0];
        int cnt=que.top()[1];
        que.pop();
        if(now>=mod) now%=mod;
        if(cnt>=mod) cnt%=mod;
        int tmp=(now*(now+1))/2;
        if(tmp>=mod) tmp%=mod;
        sum+=tmp*cnt;
        if(sum>=mod) sum%=mod;
    }
    return sum;
}
void solve() {
    int l,r;
    cin>>n>>l>>r;
    for(int i=1; i<=n; i++) cin>>a[i];
    int ans=calc(r)-calc(l-1);
    ans%=mod;
    ans+=mod;
    ans%=mod;
    cout<<ans<<"\n";
}
signed main() {
    close;
    solve();
}
/*
3 0 100
10 8 5

1 0 100
10
*/
View Code

 

标签:tmp,cnt,15,int,寒假,que,BCPC2023finla,now,mod
From: https://www.cnblogs.com/xishuiw/p/18164334

相关文章

  • HydroOJ 从入门到入土(15)批量修改题目标签(tag)
    选择还是分支?这是一个problem。好消息:搞到了一批题目!坏消息:题目没有标签好消息:导入的题目有标签!坏消息:题目标签和自己的不一样好消息:标签全部手动改完了!坏消息:还是觉得第一版好一、需求虽然理论上应该是导入之前就把标签全部调整好再导入,但实际上,导入之前调整标签并......
  • ubuntu18源码安装postgresql15.2数据库
    由于官方的源只能安装到pg10这个版本,整了好一会没有成功就改为源码安装了。下载源代码源码并解压wgethttps://ftp.postgresql.org/pub/source/v15.2/postgresql-15.2.tar.gztar-xfpostgresql-15.2.tar.gzcdpostgresql-15.2/安装C++相关开发库和编译工具aptinst......
  • [题解]P2015 二叉苹果树
    P2015二叉苹果树树形dp,一般用dfs辅助解决。当我们搜索到\(u\),此时剩下\(cnt\)条边可以用,也就是说\(u\)为根节点的子树最多可以保留\(cnt\)条边。由于上一层的需求,我们显然需要枚举剩余边数\(i\)(\(1\leqi\leqcnt\))。接下来对于每个\(i\),我们考虑剩余的\(u\)条边可以怎么放。......
  • 15-项目沟通管理(7/10 十大管理)
    14.1管理基础14.1.1沟通沟通是指用各种可能的方式来发送或接收信息。具体形式包括:书面行驶、口头形式、正式或非正式、手势动作、媒体行驶、遣词造句。14.1.2沟通模型关键要素包括:编码:把思想或想法转化为他人能理解的语言信息和反馈信息媒介噪声解码:把信息还原成有......
  • 洛谷题单指南-动态规划2-P2679 [NOIP2015 提高组] 子串
    原题链接:https://www.luogu.com.cn/problem/P2679题意解读:在a中按顺序挑选k个子串,使得这些子串连在一起正好和b相等,求方案数。解题思路:这样的题目,无外乎两个思路:DFS暴搜(得部分分)、动态规划动态规划不好想,还是先暴搜吧!1、DFS暴搜搜索的思路就是:从a起始位置开始,一直找到跟b前......
  • [题解] [洛谷P4158] 粉刷匠
    [题解][洛谷P4158]粉刷匠题目描述有\(n\)个木板,每个木板有\(m\)个格子,所有格子最开始视为没有颜色。有\(0/1\)两种颜色,每次可以粉刷其中一块木板上一段连续的格子,总共可以粉刷\(t\)次。给出一组目标颜色,问最多可以将多少个格子粉刷成目标颜色。输入格式第一行包含......
  • 15_pinctl和gpio子系统
    pinctl和gpio子系统1.什么是pinctrl和gpio子系统?​ pinctrl子系统是用来设置引脚的复用关系和电气属性的,gpio子系统是当pinctrl子系统把引脚的复用关系设置为gpio功能以后就可以使用gpio子系统来操作引脚了,比如引脚的输入输出,高低电平等2.LinuxPinctrl子系统提供的功能是......
  • 【vue3入门】-【15】侦听器
    侦听器我们可以使用watch选项在每次响应式属性发生变化时触发一个函数<template><h3>侦听器</h3><!--不可以被监听,是固定的数据--><p>{{message}}</p><!--可以被监听,只能监听响应式数据(变化的数据)--><button@click="updateHandle">修改数据</button>&l......
  • 1500PLC通过Modbus转Profinet网关与流量计Modbus通讯
     Modbus转Profinet网关(XD-MDPN100)是一种能够实现Modbus协议和Profinet协议之间转换的设备。通过使用Modbus转Profinet网关,可以实现流量计与1500PLC之间的高效通讯,使得设备之间的数据交换更加便捷和高效。1500PLC作为控制器,与Modbus转Profinet网关的结合,为工业控制系统的稳定运行......
  • 4.15
    我们都知道,在Android开发中,会遇到要请求服务器拿到图片的一种情况,这种情况又怎么进行处理,我主要就是整理了下面的一些简单方法。其实总之就是,要得到图片的URL,而不是直接得到图片的一种方式(这样处理就可能存在URL改变了,那么图片就无法显示)。//传输网络图片publicBitmapgetPic(......