题意:给定一个正整数序列,操作是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. djagno重写authenticate实现帐号和邮箱的多方式登录。

    1.在users应用的view中重写authenticate: from django.contrib.auth.backends import ModelBackend from django.db ...

  2. TI IPNC Web网页之网页修改教程

    web网页程序修改 打开gStudio之后,点击菜单栏中Help->Contents.先把这个诡异的编程语言看一遍吧.这里搬一些东西出来. GoDB简介 从第一副图片中,我们可以看出,从源文件到 ...

  3. 一张图说明HTTPS 握手过程

  4. CentOS 7.4搭建Kubernetes 1.8.5集群

    环境介绍 角色 操作系统 IP 主机名 Docker版本 master,node CentOS 7.4 192.168.0.210 node210 17.11.0-ce node CentOS 7.4 ...

  5. 程序设计入门-C语言基础知识-翁恺-第六周:数组-详细笔记(六)

    目录 第六章:数组 6-1 数组 6-2 数组计算 6.3 课后习题 第六章:数组 6-1 数组 题目:让用户输入一组整数以-1结束输入,算出这组数的平均值,并且输出大于平均值的数. 我们需要记录用户 ...

  6. Percona Xtrabackup 安装

    1.安装Percona Xtrabackup YUM Repository --安装repository [root@manager ~]# yum install https://www.perco ...

  7. elastic_search 指令

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ pass """ import os i ...

  8. 2019ICPC南昌邀请赛网络赛 I. Max answer (单调栈+线段树/笛卡尔树)

    题目链接 题意:求一个序列的最大的(区间最小值*区间和) 线段树做法:用单调栈求出每个数两边比它大的左右边界,然后用线段树求出每段区间的和sum.最小前缀lsum.最小后缀rsum,枚举每个数a[i] ...

  9. 实现同时提交多个form(基础方法) 收集(转)

    方法一: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4 ...

  10. margin top 无效

    常出现两种情况: (一)margin-top失效 两个层box1和box2,box1具有浮动属性,box2没有,这时候设置box2的上边距margin-top没有效果. 解决办法: 1.box2增加f ...