Description

算术天才⑨非常喜欢和等差数列玩耍。
有一天,他给了你一个长度为n的序列,其中第i个数为a[i]。
他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列。
当然,他还会不断修改其中的某一项。
为了不被他鄙视,你必须要快速并正确地回答完所有问题。
注意:只有一个数的数列也是等差数列。

Input

第一行包含两个正整数n,m(1<=n,m<=300000),分别表示序列的长度和操作的次数。
第二行包含n个整数,依次表示序列中的每个数a[i](0<=a[i]<=10^9)。
接下来m行,每行一开始为一个数op,
若op=1,则接下来两个整数x,y(1<=x<=n,0<=y<=10^9),表示把a[x]修改为y。
若op=2,则接下来三个整数l,r,k(1<=l<=r<=n,0<=k<=10^9),表示一个询问。
在本题中,x,y,l,r,k都是经过加密的,都需要异或你之前输出的Yes的个数来进行解密。

Output

输出若干行,对于每个询问,如果可以形成等差数列,那么输出Yes,否则输出No。

Sample Input

5 3
1 3 2 5 6
2 1 5 1
1 5 4
2 1 5 1

Sample Output

No
Yes
woc原来线段树要开4倍空间,那我NOI的时候是怎么过来的??????
orzqiancl大爷
hash暴力大法好。。。
http://qiancl.is-programmer.com/posts/192245.html
很详细了。

#include<cstdio>
#include<cctype>
#include<queue>
#include<cmath>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i;i=next[i])
using namespace std;
const int BufferSize=1<<16;
char buffer[BufferSize],*head,*tail;
inline char Getchar() {if(head==tail) {int l=fread(buffer,1,BufferSize,stdin);tail=(head=buffer)+l;}return *head++;
}
inline int read() {int x=0,f=1;char c=Getchar();for(;!isdigit(c);c=Getchar()) if(c=='-') f=-1;for(;isdigit(c);c=Getchar()) x=x*10+c-'0';return x*f;
}
typedef unsigned long long ull;
const int maxn=300010;
ull sumv[maxn*4],sum,mn;
int minv[maxn*4],lastans;
void build(int o,int l,int r) {if(l==r) minv[o]=read(),sumv[o]=(ull)minv[o]*minv[o];else {int mid=l+r>>1,lc=o<<1,rc=lc|1;build(lc,l,mid);build(rc,mid+1,r);minv[o]=min(minv[lc],minv[rc]);sumv[o]=sumv[lc]+sumv[rc];}
}
void update(int o,int l,int r,int pos) {if(l==r) minv[o]=read()^lastans,sumv[o]=(ull)minv[o]*minv[o];else {int mid=l+r>>1,lc=o<<1,rc=lc|1;if(pos<=mid) update(lc,l,mid,pos);else update(rc,mid+1,r,pos);minv[o]=min(minv[lc],minv[rc]);sumv[o]=sumv[lc]+sumv[rc];}
}
void query(int o,int l,int r,int ql,int qr) {if(ql<=l&&r<=qr) sum+=sumv[o],mn=min(mn,(ull)minv[o]);else {int mid=l+r>>1,lc=o<<1,rc=lc|1;if(ql<=mid) query(lc,l,mid,ql,qr);if(qr>mid) query(rc,mid+1,r,ql,qr);}
}
int main() {int n=read(),m=read();build(1,1,n);while(m--) {if(read()==1) update(1,1,n,read()^lastans);else {int l=read()^lastans,r=read()^lastans,v=read()^lastans;ull len=r-l+1;mn=2e9;sum=0;query(1,1,n,l,r);ull res=len*mn*(mn+(len-1)*v)+len*(len-1)*(2*len-1)/6*v*v;if(res==sum) puts("Yes"),lastans++;else puts("No");}}return 0;
}

View Code

转载于:https://www.cnblogs.com/wzj-is-a-juruo/p/5097259.html

BZOJ4373: 算术天才⑨与等差数列相关推荐

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

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

  2. [bzoj4373]算术天才⑨与等差数列

    //被标题吸引进来,无论如何都要切出来 题目大意 给你一个长度为n的序列,有m个操作,写一个程序支持以下两个操作: 1. 修改一个值 2. 给出三个数l,r,k,询问:如果把区间[l,r]的数从小到大 ...

  3. 【BZOJ4373】算术天才⑨与等差数列

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

  4. P5278 算术天才⑨与等差数列 题解

    一道不错的题目,只不过能被 hash 和维护若干次方和通过,本篇讲正解. 考虑一个乱序序列重排后是等差数列的一些条件(设区间 [ l , r ] [l,r] [l,r],公差为 d d d): 数列最 ...

  5. 等差素数咧 c语言,等差数列

    1354. 等差数列2021-05-24 20:06:01 预处理出双平方数集合 枚举双平方数中的一对数作为等差数列的首项和第二项 剪枝: 计算出当前等差数列的末项,last=x+(n-1)*d比双平 ...

  6. 暑假训练-义乌(7.8-7.15)

    暑假训练 模拟赛 图表 数据 7.8(lxl) 7.9(lxl) 7.10(lxl) 7.11(lxl) 7.12(wls) 7.13(wls) 7.14(wls) 7.15(lfds) 训练 数据结 ...

  7. [生存志] 第117节 九章算术均徭赋

            九章算术均徭赋                  贾谊在27岁时向汉文帝进献的<治安策>一文,洋洋洒洒6844个字,写了汉帝国开国30年时的九件让他忧伤难过的事情,所谓『可 ...

  8. 开放性:你可能没听说过的终极大挑战(开放性既是驱动探索智能的力量之一,也可能直接就是AI本身的组成部分)

    编者注:更多关于人工智能信息请关注2018年4月10-13日人工智能北京大会.2018年1月26日之前购买门票享有早期最惠价格 . 人工智能(Artificial Intelligence, AI)是 ...

  9. #3316. baka

    题目描述 Worldwide_D最近沉迷东方. 数学课上,Worldwide_D在研究对数,然后渐渐睡着了.他梦见自己躺在幻想乡的雾之湖边,听见旁边有两个妖精在对话,原来是Cirno和Daiyouse ...

最新文章

  1. int(1) 和 int(10) 有什么区别?资深开发竟然分不清!
  2. laravel中TokenMismatchException异常处理
  3. 【Opencv-Tools(一)】OpenCV中使用多线程处理图像
  4. mysql 左连接b表的一条数据_阿里java架构师教你怎么用mysql怒怼面试官
  5. shell总结(0基础入门)
  6. Unity 导出Supermap exe
  7. iOS开发遇到的坑之五--解决工程已存在plist表,数据却不能存入的问题
  8. POI操作Excel时Cannot get a text value from a numeric formula cell非法参数异常
  9. oracle rpad()函数
  10. 数据库(SQL)学习——基础篇一:初识数据库
  11. 使用Python发送邮件(图片、表格、附件) 系列二: 同时发送图片和附件实际案例
  12. 权限维持:DSRM 域控权限维持
  13. 微信公众平台简易设计使用
  14. PMBOK6 核对单和核查表的区别
  15. 毕业设计-基于大数据的电影爬取与可视化分析系统-python
  16. Java 本地内存 直接内存 元空间
  17. LINUX MMC 子系统分析之五 MMC driver模块分析
  18. 天龙八部元宝兑换代码 1
  19. 历史上的今天:PHP公开发布;iPhone 4 问世;万维网之父诞生
  20. Navicat Premium 12并安装

热门文章

  1. c++中报错预处理器指令后有意外标记 - 应输入换行符
  2. java读取unicode文件_java怎么样将unicode解码读取?Java读取本地文件进行unicode解码...
  3. 企业网络推广网站排名首页但确保用户体验也是企业网络推广的关键
  4. 浅析刚刚起步的创业公司应该如何选择适合自己的网站类型呢?
  5. linux定时备份mysql_linux定时备份MySQL数据库并删除七天前的备份文件
  6. awk,sed,cut获取最后一列数据
  7. 开发日记-20190523 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  8. vsftpd日志配置及查看——可以将vsftpd记录在系统日志里
  9. 企业安全建设之搭建开源SIEM平台(上)
  10. python3 多重列表推导式