HDU 4902 (线段树)
Problem Nice boat(HDU 4902)
题目大意
维护一个序列,两种操作。
第一种操作,将一段区间[l,r]赋值为x。
第二种操作,将一段区间[l,r]中大于等于x的数与x求gcd。
询问所有操作结束后的序列。
解题分析
用线段树开一个标记same,表示这段区间中的数是否相同,若相同则为该数,否则为-1。
对于第二种操作,对于覆盖区间内的same不为-1的子区间暴力修改。
虽然时限有15s,但貌似跑得挺快的,只用了1s,不知是数据水还是什么缘故。
参考程序
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std; #define N 100008
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int same[N*];
int n; int gcd(int x,int y){
return y ? gcd(y,x % y): x;
} void pushup(int rt){
if (same[rt<<]==same[rt<<|]) same[rt]=same[rt<<];
else same[rt]=-;
} void pushdown(int rt){
if (~same[rt]){
same[rt<<]=same[rt<<|]=same[rt];
same[rt]=-;
}
} void build(int l,int r,int rt){
same[rt]=-;
if (l==r){
scanf("%d",&same[rt]);
return;
}
int m=(l+r) / ;
build(lson);
build(rson);
pushup(rt);
} void update_1(int L,int R,int val,int l,int r,int rt){
if (L<=l && r<=R){
same[rt]=val;
return;
}
pushdown(rt);
int m=(l+r) /;
if (L<=m) update_1(L,R,val,lson);
if (m< R) update_1(L,R,val,rson);
pushup(rt);
} void update_2(int L,int R,int val,int l,int r,int rt){
if (L<=l && r<=R){
if (~same[rt]){
if (same[rt]>=val) same[rt]=gcd(same[rt],val);
return;
}
}
pushdown(rt);
int m=(l+r) /;
if (L<=m) update_2(L,R,val,lson);
if (m< R) update_2(L,R,val,rson);
pushup(rt);
} void query(int l,int r,int rt){
if (l==r){
printf("%d ",same[rt]);
return;
}
pushdown(rt);
int m=(l+r) / ;
query(lson);
query(rson);
} int main(){
int T;
scanf("%d",&T);
while (T--){
scanf("%d",&n);
build(,n,);
int type,a,b,val,q;
scanf("%d",&q);
while (q--){
scanf("%d %d %d %d",&type,&a,&b,&val);
if (type==) update_1(a,b,val,,n,);
if (type==) update_2(a,b,val,,n,);
}
query(,n,);
printf("%\n");
}
}
HDU 4902 (线段树)的更多相关文章
- hdu 4902 线段树+逆向模拟
http://acm.hdu.edu.cn/showproblem.php?pid=4902 出n个数,然后对这n个数进行两种操作: 如果是 1 l r x,则把 [l, r] 区间里面的每一个数都变 ...
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 3974 线段树 将树弄到区间上
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 3436 线段树 一顿操作
Queue-jumpers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 3397 线段树双标记
Sequence operation Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 4578 线段树(标记处理)
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others) ...
- hdu 4533 线段树(问题转化+)
威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- hdu 2871 线段树(各种操作)
Memory Control Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 4052 线段树扫描线、奇特处理
Adding New Machine Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
随机推荐
- sql 语句随机时间存储过程
CREATE PROC [dbo].[Proc_GetRandomTime](@startTime datetime,@endTime datetime,@date datetime output ) ...
- MySql与SqlServer的一些常用用法的差别
MySql与SqlServer的一些常用用法的差别 本文为转载 本文将主要列出MySql与SqlServer不同的地方,且以常用的存储过程的相关内容为主. 1. 标识符限定符 SqlServer [] ...
- ibatis基础
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-/ ...
- Java集合——List接口
1.定义 List是Collection的子接口,元素有序并且可以重复,表示线性表. 2.方法 add(int index,Object e):在指定索引(和数组下标类似,为0,1,2....)放入元 ...
- 使用Yeoman,Grunt和Bower开发AngularJS(译)
使用Yeoman产生AngularJS的主要骨架 使用Grunt加速开发和帮助执行 使用Bower来加入第三方插件和框架——third party plugins/frameworks 一.准备工作 ...
- BZOJ1722 [Usaco2006 Mar] Milk Team Select 产奶比赛
直接树形dp就好了恩 令$f[i][j][t]$表示以$i$为根的子树,选出来的点存在$j$对父子关系,$t$表示$i$这个点选或者没选,的最大产奶值 分类讨论自己和儿子分别有没有选,然后转移一下就好 ...
- soap base64 调用
xsd__base64Binary data; data.__ptr = (unsigned char*) soap_malloc(_soapProxy,picLen); data ...
- bzoj 2132: 圈地计划
#include<cstdio> #include<iostream> #include<cstring> #define M 100009 #define inf ...
- NSString asscii格式(2进制) 转 utf8格式——解决iOS自己处理http socket数据,遇到Transfer-Encoding: chunked时
因为需要实现自己的http客户端,就要自己模拟http 的socket通讯: 上行不难,自己处理好http即可. 但下行时,服务器端的动态语言返回数据有可能会是这种格式: http头 16进制表示的数 ...
- zoj2132-The Most Frequent Number
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2132 The Most Frequent Number Time Limi ...