博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5028: 小Z的加油店(线段树)
阅读量:4343 次
发布时间:2019-06-07

本文共 1884 字,大约阅读时间需要 6 分钟。

  NOI2012魔幻棋盘弱化版

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

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

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

#include
#include
#include
#include
#define ll long longusing 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

你可能感兴趣的文章
阶段3 2.Spring_02.程序间耦合_3 程序的耦合和解耦的思路分析1
查看>>
阶段3 2.Spring_02.程序间耦合_5 编写工厂类和配置文件
查看>>
阶段3 2.Spring_01.Spring框架简介_05.spring的优势
查看>>
阶段3 2.Spring_02.程序间耦合_7 分析工厂模式中的问题并改造
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_2 spring中的Ioc前期准备
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_4 ApplicationContext的三个实现类
查看>>
阶段3 2.Spring_02.程序间耦合_8 工厂模式解耦的升级版
查看>>
阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式
查看>>
阶段3 2.Spring_04.Spring的常用注解_2 常用IOC注解按照作用分类
查看>>
阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>