【题目描述】 给定一个长度为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)的更多相关文章

  1. 取模(mod)

    取模(mod) [题目描述] 有一个整数a和n个整数b_1, …, b_n.在这些数中选出若干个数并重新排列,得到c_1,…, c_r.我们想保证a mod c_1 mod c_2 mod … mod ...

  2. Matlab中取模(mod)与取余(rem)的区别

    取模(mod)与取余(rem)是不同的,通常取模运算也叫取余运算,它们返回结果都是余数. rem和mod唯一的区别在于: 当x和y的正负号一样的时候,两个函数结果是等同的:当x和y的符号不同时,rem ...

  3. java 取模运算% 实则取余 简述 例子 应用在数据库分库分表

    java 取模运算%  实则取余 简述 例子 应用在数据库分库分表 取模运算 求模运算与求余运算不同.“模”是“Mod”的音译,模运算多应用于程序编写中. Mod的含义为求余.模运算在数论和程序设计中 ...

  4. bzoj1951 组合数取模 中国剩余定理

    #include<bits/stdc++.h> using namespace std; typedef long long ll; const int a[4]={2,3,4679,35 ...

  5. 【转】取模(mod)与取余(rem)的区别——Matlab学习笔记

    昨天在学习Matlab的数学函数时,教程中提到取模(mod)与取余(rem)是不同的,今天在网上具体查了一下: 通常取模运算也叫取余运算,它们返回结果都是余数.rem和mod唯一的区别在于:    当 ...

  6. 数学:A^B的约数(因子)之和对MOD取模

    POJ1845 首先把A写成唯一分解定理的形式 分解时让A对所有质数从小到大取模就好了 然后就有:A = p1^k1 * p2^k2 * p3^k3 *...* pn^kn 然后有: A^B = p1 ...

  7. mongoDB 高级查询之取模查询$mod

    http://hancang2000.i.sohu.com/blog/view/235140698.htm $mod取模运算   查询age取模10等于0的数据 db.student.find( { ...

  8. 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 ...

  9. 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) ...

随机推荐

  1. 一步一步剖析Dictionary实现原理

    本文是对c#中Dictionary内部实现原理进行简单的剖析.如有表述错误,欢迎指正. 主要对照源码来解析,目前对照源码的版本是.Net Framwork 4.8,源码地址. 1. 关键的字段和Ent ...

  2. 【JavaScript】 控制自适应高度

    <iframe src="需要连接的iframe地址" id="iframepage" name="iframepage" frame ...

  3. C++代码注入

    一.C++代码注入原则: 在注入代码中不允许使用API. 在注入代码中不允许使用全局变量. 在注入代码中不允许使用字符串(编译时也被当做全局变量). 在注入代码中不允许使用函数嵌套. 二.注入代码编写 ...

  4. 游戏服务器和Web服务器的区别

    用Go语言写游戏服务器也有一个多月了,也能够明显的感受到两者的区别.这篇文章就是想具体的聊聊其中的区别.当然,在了解区别之间,我们先简单的了解一下Go语言本身. 1. Go语言的特点 Go语言跟其他的 ...

  5. SSH实现无密码登录

    1.生成秘钥 : ssh-keygen -t rsa # -t 指定生成秘钥方式,生成秘钥过程需要三次回车 2.将生成的公钥传给 ssh 的对端 ssh-copy-id root@192.168.3. ...

  6. BZOJ 1345: [Baltic2007]序列问题Sequence

    1345: [Baltic2007]序列问题Sequence Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 1180  Solved: 633[Subm ...

  7. Stock Charts

    Description You're in the middle of writing your newspaper's end-of-year economics summary, and you' ...

  8. AWVS安全渗透扫描

    1.打开软件,点击New Scan 2.在website url中输入被扫描的网址,点击next 3.在scanning profile中选择测试的漏洞类型,默认选择default(默认) 在scan ...

  9. Python:的web爬虫实现及原理(BeautifulSoup工具)

    最近一直在学习python,学习完了基本语法就练习了一个爬虫demo,下面总结下. 主要逻辑是 1)初始化url管理器,也就是将rooturl加入到url管理器中 2)在url管理器中得到新的new_ ...

  10. java.lang.OutOfMemoryError GC overhead limit exceeded原因分析及解决方案

    最近一个上线运行良好的项目出现用户无法登录或者执行某个操作时,有卡顿现象.查看了日志,出现了大量的java.lang.OutOfMemoryError: GC overhead limit excee ...