题意:1e5长的数组,ai<=1e5,问要将其变成等差数列的最小次数;

分析:

简单分析可得 —— 显然这个答案是固定的,就是原数列本来就能成为等差数列的最大个数。 但是最直接的想法是 的,一维枚举起始位置,一维扫过去,发现暂时没法优化,所以转变思路,看能否换个枚举方式,转而枚举 d(差值),同时发现如果差值大的话,完全不需要枚举完整个数列。

马上想到根号分治,对值域分治,对于大于根号 k 的差值,只需要枚举根号的长度即可,这里的复杂度是 ,但是对于前根号 k 的值,就不知道如何处理了;(我当时还想着是枚举位置,再枚举位置),但实际上,完全可以利用等差公式根据位置推到,也就是对于每个 d ,看 的众数是多少,由于再加个 log 会 T,所以开个桶解决【对于小于根号的处理方式跟这题Problem - C - Codeforces  很像】

Problem - E - Codeforces

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5;
const int mo = 998244353;
#define pb push_back
#define pii pair<int,int>
#define ft first
#define sd second
#define ffor(i,a,b,c) for(int i=(a);i<(b);i+=(c))
#define For(i,a,b,c) for(int i=(a);i<=(b);i+=(c))
#define rfor(i,a,b,c) for(int i=(a);i>(b);i-=(c))
#define Rfor(i,a,b,c) for(int i=(a);i>=(b);i-=(c))
#define all(x) (x).begin(), (x).end()
#define debug1(x) cerr<<"! "<<x<<endl;
#define debug2(x,y) cerr<<"#  "<<x<<" "<<y<<endl;
int tax[N*1000];
class Partition
{
public:Partition(int _n) : n(_n) {v.resize(n + 1);for(int i = 1; i <= n; i++) {cin >> v[i];}blo = 300; //块可以开的比根号稍微小一点,不然桶开不下,因为1GB最大约1e9个int}int cal() {int mx = 0;for (int d = 0; d <= blo; d++) {for (int i = 1; i <= n; i++) {mx = max(mx, ++tax[v[i] - i*d + del]);}for (int i = 1; i <= n; i++) {tax[v[i] - i*d + del] = 0;}}//递增的等差数列,所以只要固定位置往右枚举就行,不需要再考虑左for (int i = 1; i <= n; i++) {for(int j = i + 1; j <= n && (j - i) * blo <= N; j++) {if((v[i] - v[j]) % (i - j) == 0) mx = max(mx, ++tax[(v[i] - v[j]) / (i - j) + N] + 1);}for(int j = i + 1; j <= n && (j - i) * blo <= N; j++) {if((v[i] - v[j]) % (i - j) == 0) tax[(v[i] - v[j]) / (i - j) + N] = 0;}}return n - mx;}int slv() {int ans = cal();reverse(v.begin() + 1, v.end());ans = min(ans, cal());return ans;}private:int n, blo;vector<int> v;const int del = 30000000;
};
void slv() {int n; cin >> n;Partition Pt(n);cout << Pt.slv() << '\n';
}
int main() {ios::sync_with_stdio(false); cin.tie(0);slv();
}

PS:代码有借鉴别人,当时没想到负的也可以,一直没调出来。

感觉分块目前见到的有对序列分块,对值域分块,对询问分块。 当然每个都可以有他的衍生,而根号分块可能其实就是从属于值域分块

E. Arithmetic Operations 根号分治相关推荐

  1. 树链剖分 or 根号分治 + dfs序 + 树状数组 ---- CF1254 D. Tree Queries

    题目链接 题目大意: 问题转化: 很容易发现:假设修改的节点是vvv. 1.vvv的子树sonvson_vsonv​直接加上(n−size[sonv])n×d\frac{(n-size[son_v]) ...

  2. [CF587F]Duff is Mad[AC自动机+根号分治+分块]

    题意 给你 \(n\) 个串 \(s_{1\cdots n}\) ,每次询问给出 \(l,r,k\) ,问在 \(s_{l\cdots r}\) 中出现了多少次 \(s_k\) . \(n,q,\su ...

  3. Codeforces Round #507 (Div. 1) D. You Are Given a Tree 根号分治 + dp

    传送门 题意: 有一颗nnn个节点的树,其中一个简单路径集合被称为kkk合法当且仅当: 树的每个节点至多属于一条路径,且每条路径恰好包含kkk个点. 对于k∈[1,n]k\in [1,n]k∈[1,n ...

  4. 【CTSC2010】珠宝商【后缀自动机】【点分治】【根号分治】

    题意:给一棵 nnn 个点的树,每个点有个字符,另给一个长度为 mmm 的特征串,求树上 n2n^2n2 条有向路径在特征串中出现的次数之和. n,m≤5×104n,m\leq 5\times 10^ ...

  5. 【UOJ549】序列妙妙值【异或】【根号分治】

    题意:给一个长度为nnn的序列aaa,将其分成kkk段,不能为空,求所有段的异或和之和的最小值. n≤6×104,ai<216,k≤8n\leq 6\times 10^4,a_i <2^{ ...

  6. 基站建设(三元环计数+根号分治 / bitset)

    基站建设 problem solution code problem 给定 nnn 个地点,以及每个地点的可靠度 RiR_iRi​. 有 mmm 条光纤架,每一条连接两个不同的地点,且是双向的. 测试 ...

  7. CF1039E-Summer Oenothera Exhibition【LCT,根号分治】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1039E 题目大意 给出nnn个数的序列,mmm次询问至少将这个序列分成多少段才能满足每一段的和不超过w−qiw ...

  8. CF1039D-You Are Given a Tree【根号分治,贪心】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1039D 题目大意 给出nnn个点的一棵树,然后对于k∈[1,n]k\in[1,n]k∈[1,n]求每次使用一条 ...

  9. CF587F-Duff is Mad【AC自动机,根号分治】

    正题 题目链接:https://www.luogu.com.cn/problem/CF587F 题目大意 给出nnn个字符串sss.qqq次询问给出l,r,kl,r,kl,r,k要求输出sl..rs_ ...

最新文章

  1. 003_Servlet生命周期
  2. 评估微型计算机的主要指标,微型计算机的工作过程和主要性能指标.doc
  3. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论
  4. MIPS指令以及数据通路
  5. 同事操作两个数据源保持事务一致_终于有人把分布式事务说清楚了
  6. python 登录接口_使用python编写一个登录接口
  7. 最近总结了串口(COM)读写操作的三种方式
  8. 负载均衡 > 用户指南 > 证书管理 > 证书要求
  9. asp.net MVC中怎样让LINQ Designer自动生成的类从别的类继承并调用其基类构造器?...
  10. mysql for windows 64_MySQL 5.6 for Windows 解压缩版配置安装(win 10 64位亲测)附安装包下载链接...
  11. Visio 2003 Professional 安装序列号
  12. python爬虫+谷歌翻译json字符串
  13. 图文详解VxLAN技术(二)
  14. thoughtworks面试总结
  15. CSDN文章添加版权声明
  16. 百度地图 前端html,前端js调用百度地图常用基本功能
  17. 循环优化与多面体模型
  18. Python使用Google多语言翻译Excel文档
  19. Deepin系统下MATLAB中文字体乱码问题解决(加上字体美化)
  20. Linux_查看内存使用情况

热门文章

  1. CSS3动画实现红绿灯
  2. C#上位机,控制台达四轴SCARA机器人,以太网通信
  3. 从零记录腾讯云建站全过程
  4. 程序设计入门——C语言【课堂练习】
  5. 使用Unity接入VIVE新设备
  6. mysql数据库 查找数据类型_Mysql查询数据库表结构以及字段类型并展示
  7. Flutter组件-GridView-网格组件
  8. ati显卡驱动后,性能不咋地
  9. 关于Word的基础知识
  10. 支持向量机python代码_Python机器学习SVM支持向量机算法理论 | kTWO-个人博客