操作1 的时候标记deng[rt]表示下面一段数都是与当前节点的值相同

下次操作2时直接对有deng标记的节点gcd更新

(可能还可以更简单)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXN 11111
#include <queue>
#include <vector>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mid (r+l)>>1
const int maxn=100010;
int sum[maxn<<2] ,col[maxn<<2],deng[maxn<<2];
int gcd(int a,int b)
{while(1){if(b==0)return a;int t=b;b=a%b;a=t;}
}
void pushup(int rt)
{sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);
}
void pushdown(int rt){if(col[rt]){col[rt<<1]=col[rt<<1|1]=col[rt];sum[rt<<1]=sum[rt<<1|1]=sum[rt];col[rt]=0;}if(deng[rt]){deng[rt<<1]=deng[rt<<1|1]=deng[rt];sum[rt<<1]=sum[rt<<1|1]=sum[rt];deng[rt]=0;}
}
void build(int l,int r,int rt)
{col[rt]=deng[rt]=0;if(r==l){scanf("%d",&sum[rt]);return;}int m=mid;build(lson);build(rson);pushup(rt);
}
void out(int l,int r,int rt)
{if(r==l){printf("%d ",sum[rt]);return;}pushdown(rt);int m=mid;out(lson);out(rson);
}
void update1(int L,int R,int num,int l,int r,int rt)
{if(L<=l&&r<=R){col[rt]=1;deng[rt]=1;sum[rt]=num;return ;}pushdown(rt);int m=mid;if(L<=m) update1(L,R,num,lson);if(m<R) update1(L,R,num,rson);pushup(rt);
}
void update2(int L,int R,int num,int l,int r,int rt)
{if(sum[rt]<num)return ;if(deng[rt]&&L<=l&&r<=R){sum[rt]=gcd(sum[rt],num);col[rt]=1;deng[rt]=0;return ;}if(l==r){sum[rt]=gcd(sum[rt],num);return ;}pushdown(rt);int m=mid;if(L<=m) update2(L,R,num,lson);if(m<R) update2(L,R,num,rson);pushup(rt);
}
int main()
{int t,n,q;// freopen("in.txt","r",stdin);scanf("%d",&t);while(t--){scanf("%d",&n);build(1,n,1);scanf("%d",&q);int op,l,r,x;for(int i=0;i<q;i++){scanf("%d%d%d%d",&op,&l,&r,&x);if(op==1)update1(l,r,x,1,n,1);elseupdate2(l,r,x,1,n,1);}out(1,n,1);printf("\n");}return 0;
}

HDU 4902 Nice boat 成段线段树相关推荐

  1. 2014多校第四场1006 || HDU 4902 Nice boat (线段树 区间更新)

    题目链接 题意 : 给你n个初值,然后进行两种操作,第一种操作是将(L,R)这一区间上所有的数变成x,第二种操作是将(L,R)这一区间上所有大于x的数a[i]变成gcd(x,a[i]).输出最后n个数 ...

  2. HDU 6203 ping ping ping lca 线段树成段更新

    题目链接:HDU 6203 ping ping ping Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  3. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)

    链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...

  4. HDU 1394 Minimum Inversion Number(线段树的单点更新)

    点我看题目 题意 :给你一个数列,a1,a2,a3,a4.......an,然后可以求出逆序数,再把a1放到an后,可以得到一个新的逆序数,再把a2放到a1后边,,,,,,,依次下去,输出最小的那个逆 ...

  5. hdu 5493 Queue(逆序对,线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5493 解题思路: 一道线段树的题目,因为是前面或者后面有k个比自己高的人,所以我们应该按照由身高从小到 ...

  6. 题解报告:hdu 1754 I Hate It(线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1754 Problem Description 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某 ...

  7. hdu 1166 敌兵布阵(线段树之 单点更新+区间求和)

    敌兵布阵                                                                             Time Limit: 2000/10 ...

  8. HDU 4893 - Wow! Such Sequence!(线段树)

    题意:给定 n 个数的序列(1 <= n <= 100000,且初始均为 0),m 个操作(1 <= m <= 100000),操作共分三种: 1.将第 k 个数加 d: 2. ...

  9. [ACM] hdu 1754 I Hate It (线段树,单点更新)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

最新文章

  1. 重磅 | 机器学习大神Bengio最新论文发布,专注RNN优化难题,将在NIPS提出新概念fraternal dropout
  2. 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity
  3. 【Android WebSocket】Android 端 WebSocket 基本用法 ( 添加依赖和权限 | 创建 WebSocketClient 客户端类 | 建立连接并发送消息 )
  4. clock_gettime获取时间
  5. oracle 触发器 upsert,如何使SQLAlchemy insert与Postgres多处理proof upsert触发器一起工作?...
  6. mysql 查看锁表日志_MYSQL 表锁情况查看
  7. 前端学习(1176):set数据结构2
  8. 在linux怎样删除文件夹里,linux删除文件夹(里头有文件)
  9. Vue笔记-Ant Design Vue的使用(Vue3)
  10. linux下zip分卷z01解压,Linux下解压分包文件zip(zip/z01/z02)
  11. 一个OpenMP的学习程序
  12. 大神级ppt作品欣赏_中班美术课件星空PPT课件教案图片音乐
  13. 编辑器 UEditor 百度富文本web编辑器
  14. 十大热门职位发布 高薪行业一目了然
  15. 云服务器一直显示关机中,云服务器一直处于关机状态
  16. 微信小程序入门案例-会议邀请函
  17. 2012年奇虎360校园招聘实习生笔试编程题
  18. O(n)的时间复杂度求中位数
  19. C语言:编写一个函数,把一个从午夜0点开始计算的秒数转化为对应时间。
  20. C/C++ 学习笔记:结构体中最后一个成员为[0]或[1]长度数组(柔性数组成员)的用法

热门文章

  1. P1778 vigenere密码
  2. URI malformed
  3. 每日一练 LeetCode:E720. 词典中最长的单词
  4. .Net设计模式之适配器模式(Adapter Pattern)
  5. 系统结构期末复习(三)流水线技术
  6. “己所不欲,勿施于人”实乃一切道德之根本
  7. java爬虫抓取网页数据论坛_Java爬虫抓取网页
  8. 梁斌:为什么我们程序员难晋升(转)
  9. Comparable和Cloneable
  10. 1.4 Go语言从入门到精通:Go代理goproxy