暑期集训20190730 取模(mod)
【题目描述】 给定一个长度为n的非负整数序列a,你需要支持以下操作: 1:给定l,r,输出a[l]+a[l+1]+…+a[r]。 2:给定l,r,x,将a[l],a[l+1],…,a[r]对x取模。 3:给定k,y,将a[k]修改为y。
【输入数据】 第一行两个整数n,m。 第二行n个整数a[1]~a[n]。 接下来m行每行3或4个整数表示操作。
【输出数据】 对于每个操作1,输出一行一个整数表示答案。
【样例输入】 5 5 1 2 3 4 5 2 3 5 4 3 3 5 1 2 5 2 1 3 3 1 1 3
【样例输出】 8 5
【数据范围】 对于40%的数据,n,m<=1000。 对于100%的数据,n,m<=100000,1<=l<=r<=n,1<=k<=n,1<=x<=10^9, 0<=a[i],y<=10^9。
用线段树处理,用线段树维护区间最大值以及区间和。
进行取模操作时,如果x> 区间最大值那么退出,否则两边都递归下去。
(其实第一次做也不太明白,套模板加瞎蒙数据结果还真ac了)
这里先码一下,再复习一下线段树之后编辑详细思路。
#include <bits/stdc++.h>
#define N 1000010
#define fuck return
using namespace std;
typedef long long ll;
int n, m;
int arr[N], l[N], r[N], maxn[N];
ll sum[N]; void upd(int num) {
sum[num] = sum[num*] + sum[num*|];
maxn[num] = max(maxn[num*], maxn[num*|]);
fuck;
}
void build(int num, int pos, int y) {
l[num] = pos, r[num]=y;
if(pos == y) {
maxn[num] = arr[pos];
sum[num] = arr[pos];
fuck;
}
build(num*, pos, (pos+y)/);
build(num*|, (pos+y)/+ ,y);
upd(num);
}
void mod(int num, int pos, int y, int val) {
if(pos>r[num] || y<l[num] || maxn[num]<val) fuck;
if(l[num] == r[num]) {
sum[num] %= val;
maxn[num] = sum[num];
fuck;
}
mod(num*, pos, y, val);
mod(num*|, pos, y, val);
upd(num);
}
void act(int num, int pos, int y) {
if(l[num] == r[num]) {
maxn[num] = y;
sum[num] = y;
fuck;
}
if(pos <= (l[num] + r[num]) / ) act(num*, pos, y);
else act(num*|, pos, y);
upd(num);
}
ll output(int num, int pos, int y) {
if(pos>r[num] || y<l[num]) fuck ;
if(pos<=l[num] && y>=r[num]) fuck sum[num];
fuck output(num*, pos, y) + output(num*|, pos, y);
} int main() {
freopen("mod.in", "r", stdin);
freopen("mod.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i=; i<=n; i++) {
scanf("%d", &arr[i]);
}
build(, , n);
int pos, y, val, opt;
while(m--) {
scanf("%d", &opt);
switch(opt) {
case :
scanf("%d%d", &pos, &y);
printf("%lld\n", output(, pos, y));
break;
case :
scanf("%d%d%d", &pos, &y, &val);
mod(, pos, y, val);
break;
case :
scanf("%d%d", &pos, &y);
act(, pos, y);
break;
}
}
fuck ;
}
//being fucked by this code (2) hr (16) min
暑期集训20190730 取模(mod)的更多相关文章
- 取模(mod)
取模(mod) [题目描述] 有一个整数a和n个整数b_1, …, b_n.在这些数中选出若干个数并重新排列,得到c_1,…, c_r.我们想保证a mod c_1 mod c_2 mod … mod ...
- Matlab中取模(mod)与取余(rem)的区别
取模(mod)与取余(rem)是不同的,通常取模运算也叫取余运算,它们返回结果都是余数. rem和mod唯一的区别在于: 当x和y的正负号一样的时候,两个函数结果是等同的:当x和y的符号不同时,rem ...
- java 取模运算% 实则取余 简述 例子 应用在数据库分库分表
java 取模运算% 实则取余 简述 例子 应用在数据库分库分表 取模运算 求模运算与求余运算不同.“模”是“Mod”的音译,模运算多应用于程序编写中. Mod的含义为求余.模运算在数论和程序设计中 ...
- bzoj1951 组合数取模 中国剩余定理
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int a[4]={2,3,4679,35 ...
- 【转】取模(mod)与取余(rem)的区别——Matlab学习笔记
昨天在学习Matlab的数学函数时,教程中提到取模(mod)与取余(rem)是不同的,今天在网上具体查了一下: 通常取模运算也叫取余运算,它们返回结果都是余数.rem和mod唯一的区别在于: 当 ...
- 数学:A^B的约数(因子)之和对MOD取模
POJ1845 首先把A写成唯一分解定理的形式 分解时让A对所有质数从小到大取模就好了 然后就有:A = p1^k1 * p2^k2 * p3^k3 *...* pn^kn 然后有: A^B = p1 ...
- mongoDB 高级查询之取模查询$mod
http://hancang2000.i.sohu.com/blog/view/235140698.htm $mod取模运算 查询age取模10等于0的数据 db.student.find( { ...
- HDU——1395 2^x mod n = 1(取模运算法则)
2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- E - A^B mod C (大数乘方取模)
Description Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63) ...
随机推荐
- 前端防止url输入地址直接访问页面
首先,解决这个问题要搞明白此url是从程序内部跳转还是直接在地址栏输入的,如果是程序内部跳转,那就好办啦.方法如下: 判断用户是否登录状态,是否携带token 使用router.beforeEach注 ...
- ping通谷歌后发送QQ邮件通知
前言 国庆期间,据说是为了防止有人在重大节日发表不正当言论,很多可以kxsw的ip都被封了,可是什么时候才会解封呢,不能没事就去ping一下吧,所以我写了个定时任务,定时ping谷歌服务器,如果p ...
- 两句话掌握python最难知识点——元类
千万不要被所谓“元类是99%的python程序员不会用到的特性”这类的说辞吓住.因为每个中国人,都是天生的元类使用者 学懂元类,你只需要知道两句话: 道生一,一生二,二生三,三生万物 我是谁?我从哪来 ...
- IntelliJ IDEA下载安装及破解(100%成功)教程
原文链接:http://www.studyshare.cn/software/details/1182/0 一.下载 1.IntelliJ IDEA下载 网盘下载:https://pan.baidu. ...
- 【源码解析】凭什么?spring boot 一个 jar 就能开发 web 项目
问题 为什么开发web项目,spring-boot-starter-web 一个jar就搞定了?这个jar做了什么? 通过 spring-boot 工程可以看到所有开箱即用的的引导模块 spring- ...
- 代码审计-DedeCMS-V5.7前台任意用户密码重置
0x01 漏洞影响 该漏洞允许攻击者修改任意前台用户密码. 0x02 漏洞利用条件 1,开启会员模块 2,攻击者拥有一个正常的会员账号 3,目标没有设置安全问题 0x03 漏洞分析 漏洞文件:/mem ...
- shark恒破解笔记5-VB之rtcMsgBox
本次是来破解一个名为”系统提速精灵“的软件,方法是对rtcMsgBox下断点. 运行程序输入假码,会提示“注册码错“ 在oep上面可以看到大量vb引擎函数 明显的VB程序 载入OD对rtcMsgBo ...
- 【阿里云IoT+YF3300】6.物联网设备报警配置
纵然5G时代已经在时代的浪潮中展现出了它的身影,但是就目前的物联网环境中,网络问题仍旧是一个比较突出的硬伤.众所周知,在当前的物联网规划中,与其说是实现万物互联,倒不如说是行业指标数据监控.对于一些特 ...
- netty中Pipeline的ChannelHandler执行顺序案例详解
一.netty的Pipeline模型 netty的Pipeline模型用的是责任链设计模式,当boss线程监控到绑定端口上有accept事件,此时会为该socket连接实例化Pipeline,并将In ...
- 03jmeter-json提取器
要解决的问题:接口返回数据为json格式,需要获取返回结果中的某些值以便后续接口使用 注:可用json path tester(https://jsonpath.curiousconcept.com/ ...