NOI2012魔幻棋盘弱化版

  gcd(a,b,c,d,e)=gcd(a,b-a,c-b,d-c,e-d)

  然后就可以把区间修改变成差分后的点修了。

  用BIT维护原序列,线段树维护区间gcd,支持点修区查

#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#define ll long long
using namespace std;
const int maxn=500010;
struct poi{int sum;}tree[maxn<<2];
int n,m,ty,x,y,z,ans;
int a[maxn],bit[maxn];
void read(int &k)
{int f=1;k=0;char c=getchar();while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar();k*=f;
}
inline int gcd(int a,int b){return b?gcd(b,a%b):a;}
inline int lowbit(int x){return x&-x;}
inline void add(int x,int delta){for(;x<=n;x+=lowbit(x))bit[x]+=delta;}
inline int querybit(int x){int sum=0;for(;x;x-=lowbit(x))sum+=bit[x];return sum;}
inline void pushup(int x){tree[x].sum=gcd(tree[x<<1].sum,tree[x<<1|1].sum);}
void build(int x,int l,int r)
{if(l==r){tree[x].sum=a[l]-a[l-1];return;}int mid=(l+r)>>1;build(x<<1,l,mid);build(x<<1|1,mid+1,r);pushup(x);
}
void update(int x,int l,int r,int cx,int delta)
{if(l==r){tree[x].sum+=delta;return;}int mid=(l+r)>>1;if(cx<=mid)update(x<<1,l,mid,cx,delta);else update(x<<1|1,mid+1,r,cx,delta);pushup(x);
}
void query(int x,int l,int r,int cl,int cr)
{if(cl<=l&&r<=cr){ans=gcd(ans,abs(tree[x].sum));return;}int mid=(l+r)>>1;if(cl<=mid)query(x<<1,l,mid,cl,cr);if(cr>mid)query(x<<1|1,mid+1,r,cl,cr);
}
int main()
{read(n);read(m);for(int i=1;i<=n;i++)read(a[i]),add(i,a[i]),add(i+1,-a[i]);build(1,1,n);for(int i=1;i<=m;i++){read(ty);read(x);read(y);if(ty==1)ans=querybit(x),query(1,1,n,x+1,y),printf("%d\n",ans);else{read(z);add(x,z);add(y+1,-z);update(1,1,n,x,z);update(1,1,n,y+1,-z);}}
}

View Code

转载于:https://www.cnblogs.com/Sakits/p/7523044.html

5028: 小Z的加油店(线段树)相关推荐

  1. 【XSY2720】区间第k小 整体二分 可持久化线段树

    题目描述 给你你个序列,每次求区间第\(k\)小的数. 本题中,如果一个数在询问区间中出现了超过\(w\)次,那么就把这个数视为\(n\). 强制在线. \(n\leq 100000,a_i<n ...

  2. 小C的数学问题 线段树+分治

    题目描述 小C是个云南中医学院的大一新生,在某个星期二,他的高数老师扔给了他一个问题. 让他在1天的时间内给出答案. 但是小C不会这问题,现在他来请教你. 请你帮他解决这个问题. 有n个数,每个数有权 ...

  3. 牛客-小H的询问(线段树)

    原题链接:更好的阅读体验 题目描述 小H给你一个数组{a},要求支持以下两种操作: 0 l r(1<=l<=r<=n),询问区间[l,r]中权值和最大的有效子区间的权值和,一个子区间 ...

  4. 【codevs3304】水果姐逛水果店Ⅰ,线段树练习

    水果姐逛水果街Ⅰ 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 水果姐今天心情不错,来到了水果街. 水果街有n家水果店 ...

  5. 线段树 区间加 gcd 差分

    小阳的贝壳 如果线段树要维护区间gcd 这个很简单,但是如果有了区间加,维护gcd 就比较麻烦了. 这个首先可以证明的是 gcd(x,y,z)=gcd(x,y-x,z-y)   这个可以推到 n 个 ...

  6. [LOJ3153] 三级跳(单调栈 + 线段树)

    problem loj3153 solution 有一个显然正确但又不起眼却是正解必备的结论: 考虑 (x,y,z)(x,y,z)(x,y,z) 答案三元对,如果有一个数 i∈(x,y)∧ai≥axi ...

  7. 线段树什么的最讨厌了

    Description 小Y 最近学习了线段树,但是由于她的智商比较低,运用的还不是很熟练.于是小R 给了她一点练习题训练,其中有一道是这样的. 这是小R 写的线段树的一段建树代码: 只要调用buil ...

  8. BZOJ5249: [2018多省省队联测]IIIDX(线段树 贪心)

    题意 题目链接 Sol 不难发现题目给出的是一个树,其中\(\frac{i}{K}\)是\(i\)的父亲节点 首先,当\(d_i\)互不相同时,一个显然的贪心策略就是优先给编号小的分配较大的权值.可以 ...

  9. ACdream1157 Segments(CDQ分治 + 线段树)

    题目这么说的: 进行如下3种类型操作: 1)D L R(1 <= L <= R <= 1000000000) 增加一条线段[L,R] 2)C i (1-base) 删除第i条增加的线 ...

  10. 小清的线段树25题日志01 线段树下你和我 欢乐多又多

    前言 难度大致会按排序来 就不写总结啦 嘻嘻 适合刚学线段树的人(和我一样 练手 /*if you can't see the repayWhy not just work step by stepr ...

最新文章

  1. 最大的问题是没有发现问题之一:谈谈滥用继承
  2. 服务器支持热部署吗,热部署
  3. scenebuilder各控件属性介绍_C#控件及常用设计整理(三)
  4. 面向对象三大特性之一:继承(C++)
  5. 下载mysql镜像教程_docker下安装mysql镜像
  6. 在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据
  7. datagridview滚动条自动滚动_微软新贡献:进一步优化Chromium的滚动特性
  8. linux之Vim用快捷键快速移动光标至行首和行尾
  9. 囊括计算机 电子信息仿真技术,什么是虚拟现实?
  10. textarea怎么占满整个td_保健品为什么偏偏盯上老人?作为子女,应怎么面对老人狂买保健品...
  11. 这是我的第一个博客,以后遇到问题一起解决
  12. #CSP 201509-1 数列分段(100分)
  13. linux运行大端程序,ARM 平台上的Linux系统启动流程
  14. Oracle数据库连接、退出缓慢问题查询与处理
  15. 如何制作SCI论文中的Figure(三)
  16. [转]如何编程实现 2 + 2 = 5?
  17. 7天连锁酒店郑南雁:顺势创业者无为管理人
  18. Could not resolve placeholder
  19. Longhorn 企业级云原生容器存储解决方案-部署篇
  20. licecap免费+轻量+使用简单的录屏制作gif工具

热门文章

  1. Java拥挤度,零基础学JAVA难不难?
  2. python中str类型_python的str是什么类型
  3. python2与python3同时安装_Linux-CentOS安装python2和python3实现共存
  4. python入门学多久_为什么Python适合初学者,一般要学习多久
  5. python字典默认排序_Python字典练习:设置默认获取排序,小,知识点,setdefaultgetsorted...
  6. dh参数逆运动学_干货 | 运动学好像够用了,我们为什么还需要动力学
  7. LeetCode----两数之和
  8. python语法学习第七天--文件
  9. c语言荷兰国旗问题算法,荷兰国旗问题
  10. 计算机组成原理——第一章