区间线段树。题目还不错。

 /*  */
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <climits>
#include <cctype>
using namespace std; #define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1
#define MAXN 100005 typedef struct {
int mx, val;
} node_t; node_t T[MAXN<<];
int n, m, x;
int l; int gcd(int n, int m) {
if (m == )
return n;
if (m > n)
return gcd(m, n);
return gcd(m, n%m);
} void PushUp(int rt) {
T[rt].val = T[rt<<].val==T[rt<<|].val ? T[rt<<].val:-;
T[rt].mx = max(T[rt<<].mx, T[rt<<|].mx);
} void PushDown(int rt) {
if (T[rt].val >= ) {
T[rt<<].val = T[rt<<|].val = T[rt].val;
T[rt<<].mx = T[rt<<|].mx = T[rt].mx;
}
} void build(int l, int r, int rt) {
if (l == r) {
scanf("%d", &T[rt].val);
T[rt].mx = T[rt].val;
return ;
}
int mid = (l+r)>>;
build(lson);
build(rson);
PushUp(rt);
} void update1(int ll, int rr, int l, int r, int rt) {
if (ll<=l && rr>=r) {
T[rt].val = x;
T[rt].mx = x;
return ;
}
int mid = (l+r)>>;
PushDown(rt);
if (rr <= mid) {
update1(ll, rr, lson);
} else if (ll > mid) {
update1(ll, rr, rson);
} else {
update1(ll, mid, lson);
update1(mid+, rr, rson);
}
PushUp(rt);
} void update2(int ll, int rr, int l, int r, int rt) {
if (T[rt].mx <= x)
return ;
int mid = (l+r)>>;
if (ll<=l && rr>=r) {
if (T[rt].val >= ) {
T[rt].val = gcd(T[rt].val, x);
T[rt].mx = T[rt].val;
} else {
update2(ll, rr, lson);
update2(ll, rr, rson);
PushUp(rt);
}
return ;
}
PushDown(rt);
if (rr <= mid) {
update2(ll, rr, lson);
} else if (ll > mid) {
update2(ll, rr, rson);
} else {
update2(ll, mid, lson);
update2(mid+, rr, rson);
}
PushUp(rt);
} void printAll(int l, int r, int rt) {
if (T[rt].val >= ) {
for (int i=l; i<=r; ++i)
printf("%d ", T[rt].val);
return ;
}
int mid = (l+r)>>;
printAll(lson);
printAll(rson);
} int main() {
int i, j, k;
int l, r;
int t; #ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif scanf("%d", &t);
while (t--) {
scanf("%d", &n);
build(, n, );
scanf("%d", &m);
while (m--) {
scanf("%d %d %d %d", &k, &l, &r, &x);
if (k == ) {
update1(l, r, , n, );
} else {
update2(l, r, , n, );
}
}
printAll(, n, );
putchar('\n');
} return ;
}

【HDOJ】4902 Nice boat的更多相关文章

  1. 【HDOJ】4729 An Easy Problem for Elfness

    其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...

  2. 【HDOJ】【3506】Monkey Party

    DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...

  3. 【HDOJ】【3516】Tree Construction

    DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...

  4. 【HDOJ】【3480】Division

    DP/四边形不等式 要求将一个可重集S分成M个子集,求子集的极差的平方和最小是多少…… 首先我们先将这N个数排序,容易想到每个自己都对应着这个有序数组中的一段……而不会是互相穿插着= =因为交换一下明 ...

  5. 【HDOJ】【2829】Lawrence

    DP/四边形不等式 做过POJ 1739 邮局那道题后就很容易写出动规方程: dp[i][j]=min{dp[i-1][k]+w[k+1][j]}(表示前 j 个点分成 i 块的最小代价) $w(l, ...

  6. 【HDOJ】【3415】Max Sum of Max-K-sub-sequence

    DP/单调队列优化 呃……环形链求最大k子段和. 首先拆环为链求前缀和…… 然后单调队列吧<_<,裸题没啥好说的…… WA:为毛手写队列就会挂,必须用STL的deque?(写挂自己弱……s ...

  7. 【HDOJ】【3530】Subsequence

    DP/单调队列优化 题解:http://www.cnblogs.com/yymore/archive/2011/06/22/2087553.html 引用: 首先我们要明确几件事情 1.假设我们现在知 ...

  8. 【HDOJ】【3068】最长回文

    Manacher算法 Manacher模板题…… //HDOJ 3068 #include<cstdio> #include<cstring> #include<cstd ...

  9. 【HDOJ】【1512】Monkey King

    数据结构/可并堆 啊……换换脑子就看了看数据结构……看了一下左偏树和斜堆,鉴于左偏树不像斜堆可能退化就写了个左偏树. 左偏树介绍:http://www.cnblogs.com/crazyac/arti ...

随机推荐

  1. DOS和UNIX文本文件之间相互转换的方法

    在Unix/Linux下可以使用file命令查看文件类型,如下: file dosfile.txt 使用dos2unix 一般Linux发行版中都带有这个小工具,只能把DOS转换为UNIX文件,命令如 ...

  2. Vmare12(虚拟机)安装Mac OS X Yosemite 10.10

    需要预备的软件如下: OSX10.10的系统镜像,下载好之后将后缀.cdr改成.iso,下载来源如下:    链接:http://pan.baidu.com/s/1sj4ri5R 密码:y86w un ...

  3. DataGrid列的合并

    /// <summary> /// DataGrid列的合并 /// 注意:1.DataGrid在绑定的时候进行分组和排序,才能让相同的行放在一起 /// 2.方法应用的时机,应该在Dat ...

  4. [综合|基础|语法] 最新的皮肤帮助类 UI_Misc_Helper (转载)

    using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace ...

  5. LINQ 101——分区、Join、聚合

    一.Partitioning 分区 Take 例1:取前3个数 static void Linq1() { , , , , , , , , , }; ); Console.WriteLine(&quo ...

  6. 视频处理简单实例 [OpenCV 笔记2]

    VideoCapture是OpenCV 2.X中新增的类,提供从摄像机或视频文件捕获视频的C++接口.利用它读入视频的方法一般有两种: // method 1 VideoCapture capture ...

  7. Java之字符串学习

    java中String的使用十分频繁,是我们要学习的重点,在说String之前,我们要知道堆跟栈的区别. java中的数据类型分原生数据类型(primitived types)有八种(byte,cha ...

  8. KMP算法——字符串匹配

    正直找工作面试巅峰时期,有幸在学校可以听到July的讲座,在时长将近三个小时的演讲中,发现对于找工作来说,算法数据结构可以算是程序员道路的一个考量吧,毕竟中国学计算机的人太多了,只能使用这些方法来淘汰 ...

  9. jQuery 标签淡入淡出 个人随笔

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 使用jquer获取当前时间,并赋值到input上。

    今天,做一个项目,需要将自动获取的时间能够赋值到input上.我一开始试用javascript写的,写之后使用很多办法都赋值失败,最后使用了jquery写了出来,下面附上代码. <script ...