线段树套Treap

外层的线段树需要动态开节点

内层Treap需要注意的是,相同y坐标的点不一定是同一个点,所以需要再次离散

空间$O(n\log n)$

时间$O(n\log^2n)$

#include<cstdio>
#include<cstdlib>
#define N 705000
typedef long long ll;
int n,m,q,x1,y1,x2,y2,op,l[N],r[N],tot,R,A,B;ll w,ans,loc,c,d,inf;
inline void read(int&a){char ch;while(!(((ch=getchar())>='0')&&(ch<='9')));a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10,a+=ch-'0';}
ll gcd(ll a,ll b){if(!a&&!b)return 0;if(!a)return b;return b?gcd(b,a%b):a;}
struct node{
int p;ll val,v,sum;node*l,*r;
node(){val=v=sum=p=0;l=r=NULL;}
inline void up(){sum=gcd(v,gcd(l->sum,r->sum));}
}*blank=new(node),*T[N];
inline void Rotatel(node*&x){node*y=x->r;x->r=y->l;x->up();y->l=x;y->up();x=y;}
inline void Rotater(node*&x){node*y=x->l;x->l=y->r;x->up();y->r=x;y->up();x=y;}
void Ins(node*&x){
if(x==blank){
x=new(node);x->val=loc;x->l=x->r=blank;x->v=x->sum=w;x->p=std::rand();
return;
}
if(loc==x->val){x->v=w;x->up();return;}
if(loc<x->val){
Ins(x->l);
if(x->l->p>x->p)Rotater(x);else x->up();
}else{
Ins(x->r);
if(x->r->p>x->p)Rotatel(x);else x->up();
}
}
void Ask(node*&x,ll a,ll b){
if(x==blank)return;
if(c<=a&&b<=d){ans=gcd(ans,x->sum);return;}
if(c<=x->val&&x->val<=d)ans=gcd(ans,x->v);
if(c<x->val)Ask(x->l,a,x->val-1);
if(d>x->val)Ask(x->r,x->val+1,b);
}
void change(int&x,int a,int b){
if(!x)x=++tot,T[x]=blank;
Ins(T[x]);
if(a==b)return;
int mid=(a+b)>>1;
x1<=mid?change(l[x],a,mid):change(r[x],mid+1,b);
}
void ask(int x,int a,int b){
if(!x)return;
if(x1<=a&&b<=x2){Ask(T[x],1,inf);return;}
int mid=(a+b)>>1;
if(x1<=mid)ask(l[x],a,mid);
if(x2>mid)ask(r[x],mid+1,b);
}
int main(){
blank->l=blank->r=blank;
read(n),read(m),read(q);
inf=(ll)(m+1)*n;
while(q--){
read(op),read(x1),read(y1);x1++,y1++;
if(op==1)loc=(ll)y1*n+x1,scanf("%lld",&w),change(R,1,n);
else{
read(x2),read(y2),x2++,y2++;
c=(ll)y1*n+1,d=(ll)(y2+1)*n;
ans=0,ask(R,1,n),printf("%lld\n",ans);
}
}
return 0;
}

  

BZOJ3249 : [ioi2013]game的更多相关文章

  1. [IOI2013]Dreaming

    link 一道非常类似的题目(link) 试题大意 给你一棵含有$n$个节点的有边权森林,问每次连边将会用$L$的代价,问你若此图通过加边成为树时的最小直径.$n \leq 5\times 10^5$ ...

  2. bzoj 3246 [Ioi2013]Dreaming 贪心

    [Ioi2013]Dreaming Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 638  Solved: 241[Submit][Status][Di ...

  3. 【IOI2013】【Bzoj3246】Dreaming

    http://www.lydsy.com/JudgeOnline/problem.php?id=3246 中文题面 天地之初,世界尚在遥远的梦想之中. Serpent(水蛇)生活的地方有N个水坑,编号 ...

  4. 【bzoj3246】 Ioi2013—Dreaming

    www.lydsy.com/JudgeOnline/problem.php?id=3246 (题目链接) 题意 给出一棵不完全的树,要求在树上连最少的边使得所有点联通,并且使得两点间最大距离最小. S ...

  5. BZOJ3246 [Ioi2013]Dreaming

    Description Serpent(水 蛇)生活的地方有N个水坑,编号为0,...,N - 1,有M条双向小路连接这些水坑.每两个水坑之间至多有一条路径(路径包含一条或多条小路)相互连接,有些水坑 ...

  6. 洛谷 P5897 - [IOI2013]wombats(决策单调性优化 dp+线段树分块)

    题面传送门 首先注意到这次行数与列数不同阶,列数只有 \(200\),而行数高达 \(5000\),因此可以考虑以行为下标建线段树,线段树上每个区间 \([l,r]\) 开一个 \(200\times ...

  7. bzoj AC倒序

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

  8. IOI 2013 袋熊(线段树+分块+决策单调性)

    题意 http://www.ioi2013.org/wp-content/uploads/tasks/day1/wombats/Wombats%20zh%20(CHN).pdf 思路 ​ 我们设矩形的 ...

  9. 【BZOJ4456】 [Zjoi2016]旅行者 / 【UOJ #184】 【ZJOI2016】旅行者

    Description 小Y来到了一个新的城市旅行.她发现了这个城市的布局是网格状的,也就是有n条从东到西的道路和m条从南到北 的道路,这些道路两两相交形成n×m个路口 (i,j)(1≤i≤n,1≤j ...

随机推荐

  1. NGUIJoysticK

    原始的: using UnityEngine; using System.Collections; public class NGUIJoystick : MonoBehaviour { public ...

  2. Linux 查看网络连接状态

    CLOSED:无连接是活动的或正在进行ESTABLISED:已建立连线的状态:SYN_SENT:发出主动连线 (SYN 标志) 的连线封包:SYN_RECV:接收到一个要求连线的主动连线封包:FIN_ ...

  3. awk内置字符串函数 awk 格式化输出

    i249 ~ # ps -efl|head -1|awk '$2~/S/{print $2}'Si249 ~ # ps -efl|awk '$2~/S/{print $2}'SSSS printf - ...

  4. intellij idea 如何更改编辑器文本字体和大小

    换上了intellij idea之后,第一件事就是想要改变下文字字体,因为在我这个27寸的2k分辨率的屏幕上,文字显然太小了. intellij idea字体设值分成两部分,一部分是UI部分字体字号设 ...

  5. python动态获取对象的属性和方法

    http://blog.csdn.net/kenkywu/article/details/6822220首先通过一个例子来看一下本文中可能用到的对象和相关概念.01     #coding: UTF- ...

  6. 2013 ACM/ICPC 长春网络赛E题

    题意:给出一个字符串,要从头.尾和中间找出三个完全相等的子串,这些串覆盖的区间互相不能有重叠部分.头.尾的串即为整个字符串的前缀和后缀.问这个相同的子串的最大长度是多少. 分析:利用KMP算法中的ne ...

  7. Android 和iOS 中关于View 的一点知识

    View的概念和方法十分重要,这里将对Android 和iOS中出现的,关于视图的一些知识点进行总结,预计文章会比较长,要许多时间慢慢补充. 先转载一部分资料,感谢原作者! 原链接为:http://b ...

  8. ACdream 1188 Read Phone Number (字符串大模拟)

    Read Phone Number Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Sub ...

  9. python——生成器

    python——生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个 ...

  10. Android之XML序列化和解析

    XML文件是一种常用的文件格式,可以用来存储与传递数据 ,本文是XML文件序列化与解析的一个简单示例 写文件到本地,并用XML格式存储 /** * 写xml文件到本地 */ private void ...