链接:https://ac.nowcoder.com/acm/contest/392/F
来源:牛客网

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
因为上次在月月面前丢人了,所以华华决定开始学信息学。十分钟后,他就开始学树状数组了。这是一道树状数组的入门题:
给定一个长度为N的序列A,所有元素初值为0。接下来有M次操作或询问:
操作:输入格式:1 D K,将A_DA
D

加上K。
询问:输入格式:2 L R,询问区间和,即\sum_{i=L}^{R}A_i∑
i=L
R

A
i


华华很快就学会了树状数组并通过了这道题。月月也很喜欢树状数组,于是给华华出了一道进阶题:
给定一个长度为N的序列A,所有元素初值为0。接下来有M次操作或询问:
操作:输入格式:1 D K,对于所有满足1\le i\le N1≤i≤N且i\equiv0(\mod D)i≡0(modD)的i,将A_iA
i

加上K。
询问:输入格式:2 L R,询问区间和,即\sum_{i=L}^{R}A_i∑
i=L
R

A
i


华华是个newbie,怎么可能会这样的题?不过你应该会吧。
输入描述:
第一行两个正整数N、M表示序列的长度和操作询问的总次数。
接下来M行每行三个正整数,表示一个操作或询问。
输出描述:
对于每个询问,输出一个非负整数表示答案。
示例1
输入
复制
10 6
1 1 1
2 4 6
1 3 2
2 5 7
1 6 10
2 1 10
输出
复制
3
5
26
备注:
1\le N,M\le10^51≤N,M≤10
5
,1\le D\le N1≤D≤N,1\le L\le R\le N1≤L≤R≤N,1\le K \le 10^81≤K≤10
8

思路:

这里我用 laze[i] 代表 i的倍数被加多少值

询问的时候暴力扫1~sqrtn 的laze,同时用数论分块可以知道 区间中i的倍数有多少个,计算贡献即可。

推荐博客:https://www.cnblogs.com/zjl192628928/p/10544105.html

细节见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
ll powmod(ll a, ll b, ll MOD) {ll ans = 1; while (b) {if (b % 2)ans = ans * a % MOD; a = a * a % MOD; b /= 2;} return ans;}
inline void getInt(int* p);
const int maxn = 100010;
const int inf = 0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
ll tree[maxn];
int n;
int lowbit(int x)
{return x & (-1 * x);
}
void add(int x, ll val)
{while (x <= n){tree[x] += val;x += lowbit(x);}
}
ll ask(int x)
{ll res = 0ll;while (x){res += tree[x];x -= lowbit(x);}return res;
}
ll laze[maxn];
// ll n;
int main()
{//freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);//freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);int m;scanf("%d", &n);scanf("%d", &m);int blocks=(int)(sqrt(n)+0.5);while(m--){int op,l,r;scanf("%d %d %d",&op,&l,&r);if(op==1){if(l>=blocks){for(int i=l;i<=n;i+=l){add(i,1ll*r);}}else{laze[l]+=r;}}else{ll ans=ask(r)-ask(l-1);repd(i,1,blocks){ans+=laze[i]*(r/i-(l-1)/i);}printf("%lld\n",ans );}}return 0;
}inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

转载于:https://www.cnblogs.com/qieqiemin/p/11421197.html

牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)相关推荐

  1. 牛客小白月赛61 F.选座椅(双指针)

    牛客小白月赛61 F.选座椅(双指针) 显然 ( l , r ) (l,r) (l,r)满足 ( l , r + 1 ) (l,r+1) (l,r+1)满足. 那么可以考虑双指针,枚举 l l l,然 ...

  2. 牛客小白月赛2 F.黑黑白白

    牛客小白月赛2 F.黑黑白白 题目链接 题目描述 艮为山,动静得宜,适可而止:兑为泽,刚内柔外,上下相和. 艮卦:兼山,艮:君子以思不出其位.财帛常打心头走,可惜眼前难到手,不如意时且忍耐,逢着闲事休 ...

  3. 牛客小白月赛28 E-会当凌绝顶,一览众山小 线段树+二分暴力模拟

    牛客小白月赛28 E-会当凌绝顶,一览众山小 线段树+二分暴力模拟 题意 思路 Code 传送门: https://ac.nowcoder.com/acm/contest/16081/E 题意 登山顺 ...

  4. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  5. 牛客小白月赛12 J 月月查华华的手机 (序列自动机模板题)

    链接:https://ac.nowcoder.com/acm/contest/392/J 来源:牛客网 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇 ...

  6. 牛客小白月赛12 C 华华给月月出题 (积性函数,线性筛)

    链接:https://ac.nowcoder.com/acm/contest/392/C 来源:牛客网 华华给月月出题 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K, ...

  7. 牛客小白月赛12 H 华华和月月种树 (离线dfs序+线段树)

    链接:https://ac.nowcoder.com/acm/contest/392/H 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K,其他语言2621 ...

  8. 牛客小白月赛12 D 月月给华华出题 (欧拉函数,数论,线筛)

    链接:https://ac.nowcoder.com/acm/contest/392/D 来源:牛客网 月月给华华出题 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 131072K, ...

  9. 牛客小白月赛12 I 华华和月月逛公园 (tarjian 求桥)

    链接:https://ac.nowcoder.com/acm/contest/392/I 来源:牛客网 华华和月月逛公园 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K, ...

最新文章

  1. 列举某域名下所有二级域名的方法
  2. 为什么你需要将代码迁移到ASP.NET Core 2.0?
  3. windows如何使用ssh登录ubuntu
  4. ios(safar/微信)返回不执行js
  5. Qt creator5.7 OpenCV249之图片膨化(含源码下载)
  6. JEECG 前端JS国际化实现,采用i18n新技术方案
  7. 不相干进程之间传递文件描述符
  8. 05-Prohibited package name: java异常原因
  9. 【报告分享】2021H1电商发展分析报告.pdf(附下载链接)
  10. 定义斜体文本的html标签,HTML 文本格式化
  11. 报表开发导出各种格式文件的API
  12. silverlight:分享一个不错的自定义布局CollectionFlow(可用于制作相册的哦!)
  13. 12.Memcached 与 Redis 区别
  14. 华硕重装系统键盘灯失效 =重装ATK驱动
  15. 酷播云视频列表功能教程,简单实现视频列表连播
  16. 潮流话机直接对接讯时FXO
  17. 图解刘谦如何手穿玻璃桌(详细图文说明)
  18. 托攻击的多种攻击方式-----WZW托攻击学习日记(五)
  19. Addressable热更新
  20. python循环队列_JS 队列-优先队列、循环队列

热门文章

  1. Linux Ubuntu终端“@”前后的含义及修改(修改用户名及主机名)【试用办法,部分不可行】
  2. oracle中角色和用户权限,Oracle用户、角色、权限管理
  3. java当中各种流的应用场景_Java中有哪些流,常用流有哪些并有何特点和使用场景 NIO流,特性及使用时注意的事项 IO与NIO区别...
  4. 德 梅齐里亚克的砝码问题matlab,德梅齐里亚克砝码问题之解
  5. mysql默认乐观锁悲观锁_MySQL中悲观锁和乐观锁到底是什么?-阿里云开发者社区...
  6. 单模光电转换器怎么接_我对汽车电子电磁兼容测试实验室使用的光电收发器之使用管理方式的一些看法...
  7. vivo手机解锁工具_点燃解锁的多一份激情,vivo NEX双屏版解锁体验报告
  8. postgres 把一个表的值转成另一个表的字段名_Phoenix系列创建Phoenix映射表
  9. 怎么写CORTEX在windows用arm-none-eabi-gcc编译时的makefile
  10. layuiadmin上手好难_新手如何快速上手自媒体赚钱?送你4个好建议!记得收藏