ACWing

Description

给定一个长度为N的数列A以及一个整数T.我们要把A分成若干段,使得每一段的'校验值'都不超过N.求最少需要分成几段.

Sol

首先是校验值的求法:

要使得'每对数的差的平方'之和最大,显然就是先排序,然后取最大和最小为一对,次大和次小为一对.....

然后是问题的转化:求最少分的段数,显然就是确定左端点后,在校验值不超过T的前提下尽量扩展右端点.

优化就在于右端点的扩展,当然就是用倍增辣qwq

还有就是求校验值的优化:可以不用每次都快排,而是先排增加的一段,然后归并就好了

Code

#include<iostream>
#include<cstdio>
#include<algorithm>
#define il inline
#define Rg register
#define go(i,a,b) for(Rg int i=a;i<=b;i++)
#define yes(i,a,b) for(Rg int i=a;i>=b;i++)
#define ll long long
using namespace std;
il int read()
{
int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
int T,n,m,as,a[],b[],c[];
ll K;
il bool ck(int l,int r,int md)
{
go(i,md,r)b[i]=a[i];
sort(b+md,b+r+);
int i=l,j=md;
go(k,l,r)
if((i<=md- && b[i]<b[j]) || j>r)c[k]=b[i++];
else c[k]=b[j++];
i=l,j=r;int t=min(m,(r-l+)/);ll nw=;
while(t--)
nw+=1LL*(c[i]-c[j])*(c[i]-c[j]),i++,j--;
if(nw<=K)
{
go(i,l,r)b[i]=c[i];
return ;
}
return ;
}
int main()
{
T=read();
while(T--)
{
n=read(),m=read();scanf("%lld",&K);as=;
go(i,,n)a[i]=read();
int l=,r=,p=;
b[]=a[];
while(l<=n)
{
if(r+p<=n && ck(l,r+p,r+))r+=p,p*=;
else p/=;
if(!p || r==n){as++,l=++r,p=,b[l]=a[l];}
}
printf("%d\n",as);
}
return ;
}

随机推荐

  1. 薪资管理系统(Java面向对象思想)

    package com.test3; import java.util.*; import java.io.*; /** * @author qingfeng * 重要思想:面向对象思想(添加员工管理 ...

  2. oracle函数greatest(exp1,exp2,exp3,……,expn)

    [功能]返回表达式列表中值最大的一个.如果表达式类型不同,会隐含转换为第一个表达式类型. [参数]exp1……n,各类型表达式 [返回]exp1类型 [示例] SELECT greatest(10,3 ...

  3. Xib设计UITableViewCell然后动态加载

    转自: http://www.2cto.com/kf/201202/120764.html (注:环境Mac OS X Lion 10.7.3 + Xcode 4.2.1 + iOS SDK 5.0. ...

  4. 学习layui框架

    Layui是一款功能齐全的前端框架,需要引入对应的CSS文件和JS文件,附属官网链接:Layui官网

  5. mongodb Helper

    /// <summary> /// mongoDBHelper访问助手 /// </summary> public class mongoDBHelper { /// < ...

  6. 【CSS3动画】下拉菜单模拟

    下拉菜单模拟效果图: CSS3: <style> #box{width:200px; height:50px; overflow:hidden; cursor: pointer; tran ...

  7. python中使用指定GPU

    import os os.environ["CUDA_VISIBLE_DEVICES"] = "2" # 或 os.environ["CUDA_VIS ...

  8. PHP 面试题三

    1.nginx使用哪种网络协议? nginx是应用层 我觉得从下往上的话 传输层用的是tcp/ip 应用层用的是http fastcgi负责调度进程 2. <? echo 'hello tush ...

  9. Vue2.0做的项目在IE下面打开一片空白?

    解决方式:安装 "babel-polyfill" 即可. 命令:cnpm install --save-dev babel-polyfill 在入口main.js文件引入:impo ...

  10. P1077 旅行

    题目描述 你要进行一个行程为7000KM的旅行,现在沿途有些汽车旅馆,为了安全起见,每天晚上都不开车,住在汽车旅馆,你手里现在已经有一个旅馆列表,用离起点的距离来标识,如下: 0, 990, 1010 ...