题目链接 题目大意:  给你n个数, 给两种操作, 一种给你l, r, k,问你[l, r]区间里的数排序后能否构成一个公差为k的等差数列. 另一种是将位置x的数变为y. 强制在线. 可以用hash来做, 用线段树保存一个区间里的最小值, 和, 以及平方的和. 然后每次询问, 假设这个区间构成等差数列,那么首项为这个区间的最小值, 然后按公式算出以minn为首项, k为公差的数列的和, 为a1*len+len*(len-1)/2*d, 然后算出平方的和, 相当于sigma(i : 0 to le…
4373: 算术天才⑨与等差数列 Time Limit: 10 Sec  Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem.php?id=4373 Description 算术天才⑨非常喜欢和等差数列玩耍.有一天,他给了你一个长度为n的序列,其中第i个数为a[i].他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列.当然,他还会不断修改其中的某一项.为了不被他鄙视,你必须要…
Description 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列. 当然,他还会不断修改其中的某一项. 为了不被他鄙视,你必须要快速并正确地回答完所有问题. 注意:只有一个数的数列也是等差数列. Input 第一行包含两个正整数n,m(1<=n,m<=300000),分别表示序列的长度和操作的次数. 第二行包含n个整数,依次表示序列中的…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4373 能形成公差为k的等差数列的条件:mx-mn=k*(r-l) && 差分数组gcd为k  && 区间内没有重复的数. 这些都可以线段树维护. 那个“没有重复的数”需要给每个位置记下权值的pre,修改的时候需要找到它前面一个和后面一个. 用链表的话没法插入.可以给每个权值开一个set,就能用lower_bound了. 有些细节.重载运算符很方便. #include&…
mdzz,这道题重构了4遍,花了一个晚上... 满足等差数列的条件: 1. 假设min是区间最小值,max是区间最大值,那么 max-min+k(r−l) 2. 区间相邻两个数之差的绝对值的gcd=k 3. 区间没有重复的数 前两个条件直接线段树就好啦:而第三个条件:对于每个权值开个set,值为位置(离散化)然后维护一个pp[i],表示当前a[i]这个值,在i前面最后一次出现的位置. 那么满足第3个条件,当且仅当区间[l,r]的 max { pre[ i ] } ( l <= i <= r )…
题意:给你一个长度为n的序列,有m个操作,写一个程序支持以下两个操作: 1. 修改一个值 2. 给出三个数l,r,k, 询问:如果把区间[l,r]的数从小到大排序,能否形成公差为k的等差数列. n,m≤300000 0≤k,a[i]≤109 题解 这题坑我很久. 一眼望去这题不可作.(倒是想到维护最小值和最大值.) 然后翻了题解.发现我的想法和题解差不多. 直接维护区间等差数列显然很难,那么考虑一下:如果区间[l,r] (l < r)排序后能形成公差为k(k>0)的等差数列,要满足什么条件?…
BZOJ4373 算术天才⑨与等差数列 Description 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列. 当然,他还会不断修改其中的某一项. 为了不被他鄙视,你必须要快速并正确地回答完所有问题. 注意:只有一个数的数列也是等差数列. Input 第一行包含两个正整数n,m(1<=n,m<=300000),分别表示序列的长度和操作的次数…
算术天才⑨与等差数列 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列. 当然,他还会不断修改其中的某一项. 为了不被他鄙视,你必须要快速并正确地回答完所有问题. 注意:只有一个数的数列也是等…
[BZOJ4373]算术天才⑨与等差数列 Description 算术天才⑨非常喜欢和等差数列玩耍.有一天,他给了你一个长度为n的序列,其中第i个数为a[i].他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k的等差数列.当然,他还会不断修改其中的某一项.为了不被他鄙视,你必须要快速并正确地回答完所有问题.注意:只有一个数的数列也是等差数列. Input 第一行包含两个正整数n,m(1<=n,m<=300000),分别表示序列的长度和操作的次数.第二行…
等差数列 为了检验学生的掌握情况,jyy布置了一道习题:给定一个长度为N(1≤N≤100,000)的数列,初始时第i个数为vi(vi是整数,−100,000≤vi≤100,000),学生们要按照jyy的给出的操作步骤来改变数列中的某些项的值.操作步骤的具体形式为:A s t a b (s,t,a,b均为整数,1≤s≤t≤N,−100,000≤a,b≤100,000),它表示,在序列的[s,t]区间上加上初值为a,步长为b的等差数列.即vi变为vi+a+b×(i−s)(对于s≤i≤t). 在焦头烂…