题意:给定一个正整数序列,操作是1.区间赋值,2.区间大于x的数与x取gcd,最后输出操作后的序列

用平衡树维护相同数组成的连续段,每次操作至多增加两个连续段,操作2记录一下区间最小值然后暴力修改,每个数在被修改次数不会超过质因数个数,于是均摊单次修改复杂度在log^2(n)左右

#include<bits/stdc++.h>
char buf[],*ptr=buf-;
int _(){
int x=,c=*++ptr;
while(c<)c=*++ptr;
while(c>)x=x*+c-,c=*++ptr;
return x;
}
int gcd(int a,int b){
for(int c;b;c=a,a=b,b=c%b);
return a;
}
void mins(int&a,int b){if(a<b)a=b;}
int T;
struct node{
int l,r,x,mx,rnd;
node*lc,*rc;
void pr(){
if(!this)return;
lc->pr();
for(int i=l;i<=r;++i)printf("%d ",x);
rc->pr();
}
void up(){
mx=x;
if(lc)mins(mx,lc->mx);
if(rc)mins(mx,rc->mx);
}
void gcds(int v){
if(!this||mx<=v)return;
if(x>v)x=gcd(x,v);
lc->gcds(v);
rc->gcds(v);
up();
}
}ns[],*ss[],*rt;
struct drt{node*lc,*rc;};
int sp=;
node*_new(int l,int r,int x){
node*w=ss[--sp];
w->l=l;w->r=r;w->mx=w->x=x;
return w;
}
void del(node*&w){
if(!w)return;
del(w->lc);
del(w->rc);
ss[sp++]=w;
w=;
}
node*merge(node*a,node*b){
if(!a)return b;
if(!b)return a;
if(a->rnd>b->rnd){
a->rc=merge(a->rc,b);
a->up();
return a;
}
b->lc=merge(a,b->lc);
b->up();
return b;
}
drt split(node*w,int x){
if(!w)return (drt){,};
drt m;
if(w->l>=x){
m=split(w->lc,x);
w->lc=m.rc;
m.rc=w;
w->up();
return m;
}
if(w->r<x){
m=split(w->rc,x);
w->rc=m.lc;
m.lc=w;
w->up();
return m;
}
node*u=m.lc=_new(w->l,x-,w->x);
u->lc=w->lc;
u->up();
m.rc=w;
w->lc=;w->l=x;
w->up();
return m;
}
int main(){
fread(buf,,sizeof(buf),stdin);
srand();
for(int i=;i<=;++i)(ss[sp++]=ns+i)->rnd=rand();
for(T=_();T;--T){
int n=_();
rt=;
for(int i=;i<=n;++i){
node*w=_new(i,i,_());
rt=merge(rt,w);
}
for(int q=_(),o,l,r,x;q;--q){
o=_();l=_();r=_();x=_();
if(o==){
drt a=split(rt,l);
drt b=split(a.rc,r+);
del(b.lc);
node*w=_new(l,r,x);
rt=merge(a.lc,merge(w,b.rc));
}else{
drt a=split(rt,l);
drt b=split(a.rc,r+);
b.lc->gcds(x);
rt=merge(a.lc,merge(b.lc,b.rc));
}
}
rt->pr();
putchar();
del(rt);
}
return ;
}

最新文章

  1. Synchronized
  2. Tcp方式采集CNC兄弟设备数据
  3. Destination Host Unreachable
  4. ZooKeeper学习第二期--ZooKeeper安装配置
  5. JavaScript数组常用操作
  6. 算法第四版 在Eclipse中调用Algs4库
  7. WebView用法
  8. Spring 事务管理高级应用难点剖析--转
  9. Android 设定activity的进入和退出效果
  10. Multipart Upload with HttpClient 4--reference
  11. [深入React] 5.MVC
  12. 服务器上开启远程sqlserver小细节
  13. 利用OpenCV和MFC对话框建设一个有滑动条控制的播放器--转
  14. height/innerHeight/outerHeight
  15. php的二维数组排序
  16. java内存分页计算
  17. Oracle 11g OGG mgr定期清理tail 文件
  18. 【spring】使用spring过程中踩到的坑
  19. JS中创建多个相同的变量出现的问题
  20. 【读书笔记】iOS-iOS的持续集成

热门文章

  1. 九、dbms_ddl(提供了在PL/SQL块中执行DDL语句的方法)
  2. mysql5.6与mysql5.5不同
  3. C# 图片缩放,拖拽后保存成图片的功能
  4. 严重:Error configuring application listener of class org.springframework.web.util.IntrospectorCleanupListener
  5. Java基础学习-接口-概述以及成员特点
  6. Django中通过定时任务触发页面静态化的方式
  7. New Concept English three(17)
  8. SpringMVC札集(07)——JSON数据
  9. Android 开发技术选型(博客,新闻,阅读类)
  10. IOS开发GCD小结