4373

思路:

  判断一个数列是否是等差数列:

    1,最大值减去最小值==(区间个数-1)*k;

    2,gcd==k;

    3,不能有重复(不会这判断这一条,但是数据水就过了);

来,上代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; #define maxn 300005 struct TreeNodeType {
int l, r, max, min, gcd, mid;
};
struct TreeNodeType tree[maxn << ]; int n, m, ai[maxn], ty; inline void in(int &now)
{
char Cget = getchar(); now = ;
while (Cget > '' || Cget < '') Cget = getchar();
while (Cget >= ''&&Cget <= '')
{
now = now * + Cget - '';
Cget = getchar();
}
} int gcd(int a, int b)
{
int tmp;
while(b!=) tmp=b,b=a%b,a=tmp;
return a;
} void tree_build(int now, int l, int r)
{
tree[now].l = l, tree[now].r = r;
if (l == r)
{
tree[now].gcd = ai[l] - ai[l - ];
tree[now].min = ai[l], tree[now].max = ai[l];
return;
}
tree[now].mid = l + r >> ;
tree_build(now << , l, tree[now].mid);
tree_build(now << | , tree[now].mid + , r);
tree[now].gcd = gcd(tree[now << ].gcd, tree[now << | ].gcd);
tree[now].max = max(tree[now << ].max, tree[now << | ].max);
tree[now].min = min(tree[now << ].min, tree[now << | ].min);
} void pre()
{
in(n), in(m);
for (int i = ; i <= n; i++) in(ai[i]);
tree_build(, , n);
} int tree_do(int now, int l, int r)
{
if (tree[now].l == l&&tree[now].r == r)
{
if (ty == ) return tree[now].max;
if (ty == ) return tree[now].min;
if (ty == ) return tree[now].gcd;
tree[now].gcd = ai[l] - ai[l - ];
tree[now].max = ai[l], tree[now].min = ai[l];
return ;
}
int res=;
if (l > tree[now].mid) res = tree_do(now << | , l, r);
else if (r <= tree[now].mid) res = tree_do(now << , l, r);
else
{
res = tree_do(now << , l, tree[now].mid);
if (ty == ) res = max(res, tree_do(now << | , tree[now].mid + , r));
if (ty == ) res = min(res, tree_do(now << | , tree[now].mid + , r));
if (ty == ) res = gcd(res, tree_do(now << | , tree[now].mid + , r));
}
if (ty == )
{
tree[now].gcd = gcd(tree[now << ].gcd, tree[now << | ].gcd);
tree[now].max = max(tree[now << ].max, tree[now << | ].max);
tree[now].min = min(tree[now << ].min, tree[now << | ].min);
}
return res;
} void solve()
{
int op, l, r, x, y, last = ;
for (int t = ; t <= m; t++)
{
in(op);
if (op == )
{
in(x), in(y);
x^=last,y^=last,ty=,ai[x]=y;
tree_do(,x,x);
if(x!=n) tree_do(,x+,x+);
}
else
{
in(l),in(r),in(x);
l^=last,r^=last,x^=last;
if(l==r)
{
last++;
printf("Yes\n");
continue;
}
int ma,mi,gcdd;
ty=,ma=tree_do(,l,r);
ty=,mi=tree_do(,l,r);
ty=,gcdd=tree_do(,l+,r);
if((ma-mi)==x*(r-l)&&abs(gcdd)==x) printf("Yes\n"),last++;
else printf("No\n");
}
}
} int main()
{
pre();
solve();
return ;
}

AC日记——算术天才⑨与等差数列 bzoj 4373的更多相关文章

  1. bzoj 4373 算术天才⑨与等差数列

    4373: 算术天才⑨与等差数列 Time Limit: 10 Sec  Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem.ph ...

  2. BZOJ4373 算术天才⑨与等差数列 【线段树】*

    BZOJ4373 算术天才⑨与等差数列 Description 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k ...

  3. 【BZOJ4373】算术天才⑨与等差数列 [线段树]

    算术天才⑨与等差数列 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 算术天才⑨非常喜欢和等 ...

  4. 【BZOJ4373】算术天才⑨与等差数列 线段树+set

    [BZOJ4373]算术天才⑨与等差数列 Description 算术天才⑨非常喜欢和等差数列玩耍.有一天,他给了你一个长度为n的序列,其中第i个数为a[i].他想考考你,每次他会给出询问l,r,k, ...

  5. JSOI2009 等差数列 和 算术天才⑨与等差数列 和 CH4302 Interval GCD

    等差数列 为了检验学生的掌握情况,jyy布置了一道习题:给定一个长度为N(1≤N≤100,000)的数列,初始时第i个数为vi(vi是整数,−100,000≤vi≤100,000),学生们要按照jyy ...

  6. BZOJ 4373: 算术天才⑨与等差数列 线段树

    Description 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能 ...

  7. 【线段树 集合hash】bzoj4373: 算术天才⑨与等差数列

    hash大法好(@ARZhu):大数相乘及时取模真的是件麻烦事情 Description 算术天才⑨非常喜欢和等差数列玩耍.有一天,他给了你一个长度为n的序列,其中第i个数为a[i].他想考考你,每次 ...

  8. [线段树]洛谷P5278 算术天才⑨与等差数列

    题目描述 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k ...

  9. bzoj 4373 算术天才⑨与等差数列——线段树+set

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4373 能形成公差为k的等差数列的条件:mx-mn=k*(r-l) && 差分 ...

随机推荐

  1. tp事务处理

    数据库事务处理见手册 逻辑事务处理 Model->startTrans(); // 开启事务 if(操作失败) { Model->rollback(); // 回滚 }else { Mod ...

  2. 设置MySQL允许外网访问 费元星 feiyuanxing.com 站长

    1.修改配置文件sudo vim /etc/mysql/my.cnf把bind-address参数的值改成你的内/外网IP或0.0.0.0,或者直接注释掉这行. 2.登录数据库mysql -u roo ...

  3. 怎么设置才能让外网ip可以访问mysql数据库[转]

    转自: http://www.hongyanliren.com/89.html 使用mysql中,很多人都会遇到这样的问题:在vps服务器或者云服务器上安装了mysql后,使用其他工具在外网ip之下根 ...

  4. Python 爬虫-豆瓣读书

    import requests from bs4 import BeautifulSoup def parse_html(num): headers = { 'User-Agent': 'Mozill ...

  5. Android color颜色-色号总结

    code时经常会用到颜色,然而对于像我这样的对于颜色不是很敏感的同学来说,就很痛苦了. 我想要某种颜色,但是又说不出来具体是哪种:这边总结了一下color种类以及色号. <?xml versio ...

  6. wxPython 界面编程的有关事件

    在事件处理的过程中涉及四个要素: 1.事件. 它是用户对界面的操作,在wxPython中事件被封装成事件类wx.Event及其子类,例如按钮事件类wx.CommandEvent,鼠标事件类是wx.Mo ...

  7. Where can I find the IPA logs

    Retrieving the IPA logs will differ depending on which base image was used. Operating system that do ...

  8. MySQL事物相关学习

    总结下最近对MySQL数据库的认识 Q:在手动开启事物后,commit失败是否需要显示的rollback? A:在网上查了不少资料,没有查到明确的答案.问了身边的朋友,朋友也不太了解,不过均表示显示的 ...

  9. 【转】Unity3D研究院之设置自动旋转屏幕默认旋转方向

    http://www.xuanyusong.com/archives/2871 如下图所示,在处理屏幕默认旋转方向的时候可以在这里进行选择,上下左右一共是4个方向. 策划的需求是游戏采用横屏,但是要求 ...

  10. MSHflexgrid控件删除选中行

    相应的代码: Private Sub some_Click() '定义变量 Dim txtSQL As String Dim MsgText As String Dim Online_mrc As A ...