题意:给定一个正整数序列,操作是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 ;
}

bzoj 3867: Nice boat的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  3. Lesson 20 One man in a boat

    Text Fishing is my favourite sport. I often fish for hours without catching anything. But this does ...

  4. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  5. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  6. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  7. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  8. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

  9. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

随机推荐

  1. gitblit-部署

    什么是 Gitblit Gitblit是一个开源的用于管理,查看和提供Git仓库. 它主要设计为希望托管集中存储库的小工作组的工具. Gitblit有什么特点 Gitblit部署示例1 日常维护添加步 ...

  2. poscms基于list标签实现的查询分页功能

    poscms系统本身有一个在查询页(search页面)实现的查询分页功能,基于系统封装的php函数dr_search_url() 但是今天的需求除了导航栏.列表页.详情页都实现查询功能外,关键是有两个 ...

  3. 解决tensorflow的Session Exception问题

    Exception ignored in: <bound method BaseSession.__del__ of <tensorflow.python.client.session.S ...

  4. matplotlib 数据可视化

    图的基本结构 通常,使用 numpy 组织数据, 使用 matplotlib API 进行数据图像绘制. 一幅数据图基本上包括如下结构: Data: 数据区,包括数据点.描绘形状 Axis: 坐标轴, ...

  5. IOS开发Block详细用法

    Block简介:       ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数 ...

  6. linux c++ 服务器端开发面试必看书籍

    摘自别人博客,地址:http://blog.csdn.net/qianggezhishen/article/details/45951095 打算从这开始一本一本开始看 题外话: 推荐一个 githu ...

  7. Android使用HTTP协议访问网络——HttpClient

    套路篇 1.HttpClient是一个接口,因此无法创建它的实例,通常情况下都会创建一个DefaultHttpClient的实例 HttpClient httpClient=new DefaultHt ...

  8. (转) 从windows XP到10的微软官方操作系统虚拟机镜像,即下即用,不用安装

    原文地址: https://blog.csdn.net/tool321_com/article/details/50707512 最近在帮朋友安装虚拟机,遇到了这么一个东西,感觉比较不错,分享如下: ...

  9. 機器學習基石 机器学习基石(Machine Learning Foundations) 作业1 习题解答 (续)

    这里写的是  习题1 中的    18 , 19, 20 题的解答. Packet 方法,我这里是这样认为的,它所指的贪心算法是不管权重更新是否会对train data有改进都进行修正,因为这里面没有 ...

  10. my_itoa

    #include <iostream> using namespace std; char *my_reverse(char* s) { char *p,*q; p=s;q=s; whil ...