当前位置: 首页 > news >正文

邯山区建设局网站/网络科技公司

邯山区建设局网站,网络科技公司,网站公安备案提供网站名称,桂林网站开发公司http://acm.hdu.edu.cn/showproblem.php?pid4902 出n个数,然后对这n个数进行两种操作: 如果是 1 l r x,则把 [l, r] 区间里面的每一个数都变为x; 如果是 2 l r x,则 比较 [l, r]区间里的数a_i和x的大小,如…

http://acm.hdu.edu.cn/showproblem.php?pid=4902

出n个数,然后对这n个数进行两种操作:
如果是 1 l r x,则把 [l, r] 区间里面的每一个数都变为x;
如果是 2 l r x,则 比较 [l, r]区间里的数a_i和x的大小,如果a_i > x,把a_i变为a_i和x的最大公约数。
最后输出这n个数最终的值。


线段树可搞...但是没必要!...

线段树,每个结点多一个lazy表示该位置以下区间是否数字全相同,然后每次延迟操作,最后输出的时候单点查询即可

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define clr0(x) memset(x,0,sizeof(x))
typedef long long LL;
const int N = 100005;struct node
{int lazy,v;
}s[N<<3];
int c[N];
void updata(int root){s[root].v = max(s[root<<1].v,s[root<<1|1].v);
}
void build(int l,int r,int root)
{s[root].lazy = 0;if(l == r){s[root].v = c[l];return;}int mid = (l+r)>>1;build(l,mid,root<<1);build(mid+1,r,(root<<1)+1);updata(root);
}
int gcd(int a,int b)
{if(b==0)return a;return  gcd(b,a%b);
}
void changee(int l,int r,int root,int ll,int rr,int v)
{if (l > rr || r < ll) return;if (ll <= l && rr >= r){s[root].lazy = 1;s[root].v = v;return;}if(s[root].lazy){s[root<<1].lazy = 1;s[root<<1].v = s[root].v;s[root<<1|1].lazy = 1;s[root<<1|1].v = s[root].v;s[root].lazy = 0;}int mid = (l+r)>>1;changee(l,mid,root<<1,ll,rr,v);changee(mid+1,r,(root<<1)+1,ll,rr,v);updata(root);
}
void query(int l , int r , int root){if(s[root].lazy || l == r){for(int i = l;i <= r;++i)printf("%d ",s[root].v);return;}int mid = (l+r)>>1;query(l,mid,root<<1);query(mid+1,r,(root<<1)+1);
}
void change(int l , int r , int root, int ll , int rr , int x){if (s[root].v < x || l > rr || r < ll) return;if (s[root].lazy && ll <= l && rr >= r){s[root].v = gcd(x,s[root].v);return;}if(l == r){s[root].v = gcd(x,s[root].v);return;}if(s[root].lazy){s[root<<1].lazy = 1;s[root<<1].v = s[root].v;s[root<<1|1].lazy = 1;s[root<<1|1].v = s[root].v;s[root].lazy = 0;}int mid = (l+r)>>1;change(l,mid,root<<1,ll,rr,x);change(mid+1,r,(root<<1)+1,ll,rr,x);updata(root);
}
int main()
{int Q,n,_;RD(_);while(_--){RD(n);for(int i = 1;i <= n;++i)RD(c[i]);build(1,n,1);RD(Q);int l,r,q,x;while(Q--){scanf("%d%d%d%d",&q,&l,&r,&x);if(q == 1)changee(1,n,1,l,r,x);elsechange(1,n,1,l,r,x);}query(1,n,1);puts("");}return 0;
}


其实逆向模拟即可,求每一个数的最终结果时,就可以用栈从后向前压入每个操作,直到遇到1操作,或者没有遇到1操作,则初值就为输入的a_i,然后把站内元素依次取出操作即可

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <iostream>
#include <algorithm>
using namespace std;
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define clr0(x) memset(x,0,sizeof(x))
typedef long long LL;
const int maxn = 1e5+5;
struct opertion
{int t, l, r;int x;
}o[maxn];
int a[maxn];
int gcd(int a,int b)
{if(b==0)return a;return  gcd(b,a%b);
}
int main()
{int _, n, i, j, Q;RD(_);while(_--) {RD(n);for(i = 1; i <= n; i++)RD(a[i]);RD(Q);for(i = 0; i < Q; i++)RD3(o[i].t,o[i].l,o[i].r),RD(o[i].x);for(i = 1; i <= n; i++) {stack<int> s;int flag = 0;for(j = Q - 1; j >= 0; j--) {if(i >= o[j].l && i <= o[j].r) {s.push(o[j].x);if(o[j].t == 1) {flag = 1;break;}}}if(!flag)  //没有遇到1操作s.push(a[i]);while(s.size() > 1) {int ans = s.top(); s.pop();int tmp = s.top(); s.pop();if(ans > tmp)ans = gcd(ans, tmp);s.push(ans);}printf("%d ", s.top());}puts("");}return 0;
}


转载于:https://www.cnblogs.com/zibaohun/p/4046766.html

http://www.lbrq.cn/news/838153.html

相关文章:

  • 网站被挂黑链/百度指数官网查询
  • 南宁最高端网站建设/晋中网站seo
  • 品牌策划公司名字大全/石家庄seo按天扣费
  • 厦门哪些做鲜花的网站/抖音关键词查询工具
  • 徐州免费网站建站模板/广州百度网站快速排名
  • vps网站如何绑定多个域名/建站开发
  • 网站建设的岗位要求/雅虎搜索引擎中文版
  • 宁波专业网站推广平台咨询/培训机构需要什么资质
  • 铆钉机 东莞网站建设/优化关键词步骤
  • 人大 网站建设 方案/百度付费问答平台
  • 广西平台网站建设报价/宁波seo网络推广
  • 辽宁响应式网站费用/淘宝指数官网的网址
  • 网站服务器怎么优化/百度官网优化
  • 网络架构1788/seo刷排名公司
  • 自助 建站/黄山seo
  • 贵州省建设厅考证官方网站/建站公司网站建设
  • 网站线框图怎样做/有没有免费推广平台
  • 网站开发数据库速度解决方法/建网站公司哪里好
  • 调研纪委网站建设/什么是网络营销的核心
  • 金华手机网站建设/站长之家工具高清
  • 单位网站怎么做/如何做网络推广外包
  • 厦门网站关键词推广/百度下载安装2021最新版
  • 中国哪些网站做软装/深圳seo关键词优化外包公司
  • 建设网站架构服务器需要多少钱/怎么去做推广
  • 南阳做网站公司电话/广告联盟看广告赚钱
  • 哪家网站做旅游攻略好/上海百度竞价
  • 站长工具seo综合查询排名/seo网页优化培训
  • 著名的设计网站/杭州seo整站优化
  • 做游戏的网站的公司/百度官方网首页
  • sap和国家网站做接口/seo职业技能培训班
  • Java集合框架中List常见问题
  • Promise与Axios:异步编程
  • 【第二章自定义功能菜单_MenuItemAttribute_顶部菜单栏(本章进度1/7)】
  • Spring Boot启动原理:从main方法到内嵌Tomcat的全过程
  • 代码随想录算法训练营第四十九天|单调栈part2
  • 【Linux】基本指令详解(一) 树状文件结构、家目录、绝对/相对路径、linux文件类型