BZOJ4167: 永远亭的竹笋采摘 分块

结合 Conda 手动安装 RepeatMasker RepeatMasker 是一个广泛使用的生物信息学工具,用于识别和屏蔽(mask)基因组序列中的 重复序列(repeats) 。在使用过程中需要调用重复序列数据库(Repbase 和 Dfam),如果使用Conda安装的话会出现许多问题,因此推荐手动安装。在此记录我手动安装RepeatMasker的流程,希望对各位同学有所帮助。 阅读详情

题意:给定一个序列,将其分成K段,每段元素不得全相同,求sigma(每段中不同元素差值的最小值)的最小值
n<=50000,k<=1000,序列中元素<=n,序列随机生成
既然序列是随机的,我们可以想到一个区间可能要延伸很长一段才会改变其中的最小差值,那么不妨将所有有贡献的点对都枚举出来(即:这个区间的两个端点之差是整个区间中最小的),问题就转化成了在数轴上有一些带权值的线段,选择K条不相交的使权值和最小,这个对于每个点枚举以他为结尾的线段进行转移即可。现在考虑如何求出所有点对。因为点对的分布很稀疏,暴力枚举就会枚举到大量无用的点对,那么不妨使用分块加速索引,每一块预处理出对于每一种权值块内元素中与其差值最小的是多少。那么对于每一个点,枚举后面的块,若最小差值能更新当前值就暴力在块内扫一遍,然后由于要保证两端点差值是最小的,因此枚举左端点时要从右往左,然后使用树状数组检查之前是否已经有点对右端点更靠左且差值更小即可。实测最后的点对数量是O(N)级别的。
代码:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define gm 50001
#define abs _Abs
const int inf=0x7f7f7f7f;
int n,k,w,size,a[gm];
int c[gm];
int dis[gm][250];
inline int min(int a,int b){return a<b?a:b;}
inline int abs(int a){return a>>31?-a:a;}
struct e
{
    int t;
    e *n;
    int c;
    e(int t,e *n,int c):t(t),n(n),c(c){}
}*f[gm];
inline void push(int pos,int v)
{
    for(;pos<=n;pos+=pos&-pos)
    c[pos]=min(c[pos],v);
}
inline int get(int pos)
{
    int v=inf;
    for(;pos;pos-=pos&-pos)
    v=min(v,c[pos]);
    return v;
}
void setup()
{
    memset(c,0x7f,n+1<<2);
    static int b[250];
    for(int i=1;i<=w;++i)
    {
        int l=(i-1)*size+1,r=min(i*size,n);
        int top=0;
        for(;l<=r;++l) b[++top]=a[l];
        std::sort(b+1,b+top+1);
        int p1=0,p2=1;
        for(int j=1;j<=n;++j)
        {
            int &kre=dis[j][i]=inf;
            while(p1<top&&b[p1+1]<j) ++p1;
            while(p2<=top&&b[p2]<=j) ++p2;
            if(p1!=0) kre=min(kre,j-b[p1]);
            if(p2!=top+1) kre=min(kre,b[p2]-j);
        }
    }
}
void tour(int no,int block,int &ans,int beg)
{
    int end=min(block*size,n);
    for(;beg<=end;++beg)
    {
        int kre=abs(a[no]-a[beg]);
        if(kre&&kre<ans)
        {
            ans=kre;
            int cmp=get(beg);
            if(ans<cmp)
            {
                push(beg,ans);
                f[beg]=new e(no,f[beg],ans);
            }
        }
    }
}
int F[gm][1001];
int DP()
{
    memset(F,0x7f,sizeof F);
    F[0][0]=0;
    for(int i=1;i<=n;++i)
    {
        F[i][0]=0;
        for(int j=1;j<=k;++j)
        {
            int &ans=F[i][j]=F[i-1][j];
            for(e *l=f[i];l;l=l->n)
            ans=min(ans,F[l->t-1][j-1]+l->c);
            if(ans==inf) break;
        }
    }
    return F[n][k];
}
int main()
{
    scanf("%d%d",&n,&k);
    size=ceil(sqrt(n));
    w=(n-1)/size+1;
    for(int i=1;i<=n;++i) scanf("%d",a+i);
    setup();
    for(int i=n;i;--i)
    {
        int j=(i-1)/size+1;
        int len=inf;
        tour(i,j,len,i+1);
        for(++j;j<=w;++j)
        if(dis[a[i]][j]<len)
        tour(i,j,len,(j-1)*size+1);
    }
    printf("%d\n",DP());
    return 0;
}
解决VM 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VM 的方法 在启用了Credential Guard或Device Guard的Windows 10主机上启动12.5版之前的VMware Workstation中的虚拟机时,将显示蓝色诊断屏幕(BSOD)。 会看到类似于以下内容的错误: VMware Workstation和Device / Credential Guard不兼容。禁用Device / Credential Guard后,可以运行VMwar... 阅读详情

相关推荐

Rsoft仿真实战:长周期光纤光栅参数优化与模式耦合分析

本文详细介绍了使用Rsoft软件进行长周期光纤光栅(LPFG)参数优化与模式耦合分析的实战方法。通过Rsoft仿真,可以高效优化光栅周期、包层厚度等关键参数,深入分析纤芯模与包层模的耦合特性,为光纤通信和传感应用提供可靠的设计依据。

h0i1j2k3l的博客 1115

bzoj4167 永远亭的竹笋采摘

由于是随机数据,用分块加乱搞就可以水过。 详情参见大佬的博客:题解 贴个代码:#include<cstdio> #include<cstring> #include<vector> #include<cmath> #include<algorithm> using namespace std; #define MAXN 50500 #define MAXM 250 int A[M

lym01803的博客 504

DSPF28335:从零到一,实战GPIO与外部中断的嵌入式系统交互设计

本文以德州仪器DSPF28335芯片为例,详细讲解了嵌入式系统中GPIO与外部中断(EXTI)的实战配置方法。通过一个完整的按键控制LED并触发ADC采样的项目,深入剖析了GPIO寄存器配置、三级中断机制(外设-PIE-CPU)以及中断服务函数编写的核心要点,帮助开发者掌握嵌入式交互设计的基石,并提供了关键的避坑指南与调试清单。

weixin_29169899的博客 115

【BZOJ4167】永远的竹笋采摘 分块+树状数组

【BZOJ4167】永远的竹笋采摘 题解:我们考虑有多少点对(a,b)满足a与b的差值是[a,b]中最小的。以为是随机数据,这样的点对数目可能很少,实测是O(n)级别的,那么我们已知了有这么多可能对答案造成贡献的点对,如何将它们求出来呢? 考虑分块,因为所有数大小在[1,n]中,我们可以对于每个块,预处理出整个块到所有数的最小差值。然后从右往左枚举每一个点,再枚举右面所...

aodanchui1057的博客 219

LVGL在STM32H743IIT6上的性能优化技巧:如何提升图形界面刷新速度

本文详细介绍了在STM32H743IIT6高性能MCU上优化LVGL图形界面刷新速度的实战技巧。通过利用芯片的DMA2D硬件加速模块替代低效的软件画点,将绘制缓冲区放入SDRAM并启用双缓冲机制,以及合理配置CPU缓存与MPU,有效解决了界面卡顿问题。文章还涵盖了LVGL引擎调优、内存架构优化等关键步骤,帮助开发者充分发挥STM32H743的硬件潜力,实现流畅的图形界面体验。

vscode6remote的博客 308

Docker部署OnlyOffice踩坑实录:解决editor.bin下载失败的3种姿势

本文详细解析了Docker部署OnlyOffice时editor.bin下载失败的常见原因,并提供了三种核心解决方案。重点剖析了容器网络配置、Nginx反向代理(特别是proxy_pass设置)以及安全策略调整,帮助开发者彻底解决静态资源加载问题,确保文档协作平台稳定运行。

weixin_29281941的博客 873

BZOJ 2122 [分块+单调栈+二分](有详解)

题面 传送门 给定序列d和lim。假设有一个初始价值\(x_0\),则经历第i天后价值变为\(min(x_0+d[i],lim[i])\),记\(f(i,j,x_0)\)表示以初始代价x0依次经过第i天到第j天后的价值。每次询问给出\(l,r,x0\),求\(max(f(i,j,x_0))\),其中[i,j]是子串[l,r]的子串(连续)。 分析 暴力 首先有个暴力的做法 每次询问DP一次,设...

weixin_30500473的博客 320

使用 Simulink 进行电力电子系统的大信号模型仿真

电力电子系统(Power Electronics System)包括各种功率转换器(如 DC-DC 转换器、逆变器等)。这些设备中的关键组件(如 MOSFET、IGBT、电容器、电感器等)不仅影响系统的性能,还直接关系到系统的稳定性、效率和可靠性。因此,在设计阶段进行详细的建模和仿真至关重要。大信号模型仿真的目的是通过模拟系统在非线性条件下的真实行为,评估其瞬态响应、稳态性能以及对不同负载和输入电压变化的响应。通过本教程,我们介绍了如何使用 Simulink 进行电力电子系统的大信号模型仿真。背景介绍。

xiaoheshang_123的博客 305

BZOJ2038 [2009国家集训队]小Z的袜子(分块法)

【题解】 本题中,每个区间的答案不能由子问题合并得到,所以不能使用分治一类的数据结构如线段树等  而 ans = sigma( cnt[color[i]]*(cnt[color[i]]-1)/2 ),构成答案的颜色不止一种,所以要将不同颜色分开算答案  但 n 我这个蒟蒻只能写分块法。 分块的对象:由于区间的答案不能由子问题合并得到,所以对序列分块无效,考虑对询问分块  考虑将

cjk_My steps 611

PCL Fast Global Registration 快速全局配准(源码版)

Fast Global Registration(FGR)是一种经典的点云粗配准算法,已集成到Open3D和CloudCompare等软件中。本文介绍了该算法的源码实现及优化方法,包括如何通过修改源码直接读取点云进行配准,而不依赖文件中读取特征描述子。文章还提供了关键参数设置(如最大迭代次数、匹配距离等)。算法实现简单高效,未来计划发布基于纯PCL的版本。源码和论文链接已附上,供开发者参考。

点云侠的博客 383

从地方政府网站抓取政务公开数据:Python爬虫技术详解

在本文中,我们通过具体实例介绍了如何使用Python编写爬虫,从地方政府门户网站抓取政务公开数据。我们使用了requestsSelenium等最新技术,结合SQLite数据库存储抓取的数据,最后使用matplotlib进行数据可视化分析。通过本项目,您可以掌握如何抓取政府网站的公开数据,并将其进行清洗、存储和分析。这些技术对于进行政府政策分析、公共服务分析等方面具有重要的实际意义。希望通过本文的介绍,您能够更好地理解政务数据抓取的流程和方法,并能在实际工作中运用这些技术进行数据采集和分析。

2201_76125261的博客 1703

bzoj2821 -- 分块

将序列分块。 令f[i][j]表示第i块到第j块的答案,可以O(n*sqrt(n))统计出来。 令sum[i][j]表示前i块值为j的数出现了几次。每次询问暴力统计零散的数对答案的贡献就可以了。 具体见代码 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring...

213

自然语言处理NLP星空智能对话机器人系列:Gavin大咖 Transformer 101问答集 第一问

自然语言处理NLP星空智能对话机器人系列:Transformer 101问答 [让天下没有难学的Transformer] 你问我答系列之一 Gavin大咖第一问: Transformer中的可训练Queries、Keys和Values矩阵从哪儿来? 以上是智华解答,供同学们参考。 星空智能对话机器人系列博客 NLP星空智能对话机器人系列:第二次星空智能对话机器人Zoom线上演示安排 NLP星空智能对话机器人系列:StarSpace: Embed All The Things NLP星空智能对

大模型与Agent智能体 991

RT-Thread Studio实战:STM32 USB虚拟串口(VCP)配置与排坑指南

在嵌入式开发中,串口资源紧张是常见痛点,传统USB转串口芯片不仅增加硬件成本,还受限于波特率与接线稳定性。USB协议中的CDC(通信设备类)为设备提供了虚拟串口(VCP)能力,通过ACM模型将数据与控制信号分离,使MCU的USB外设枚举为标准COM口,上层应用无需感知底层差异。基于RT-Thread Studio这一集成开发环境,开发者可通过图形化配置快速使能USB Device与VCP组件,并利用RT-Thread设备框架以标准读写接口收发数据。该方案复用MCU内部USB外设,仅需D+/D-两根引脚,免去

weixin_30357231的博客 378

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

BZOJ4167 : 永远的竹笋采摘

首先枚举出所有可能成为区间最小差值的点对$(j,i)$。 枚举每个位置作为右端点$i$,假设$a[j]&gt;a[i]$。 找到第一个这样的$j$,那么可以将下一个$a[j]$的范围缩小到$(a[i],\frac{a[i]+a[j]}{2})$。这是因为在这之外的数要么没有$j$优,要么会被$j$考虑到。 利用可持久化线段树可以很容易地找到下一个$j$的位置,最多$O(n\log n)$个点...

weixin_34240520的博客 138

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

5月题目汇总(5.22---5.28)

5.23晚 NO.1 来源: BZOJ 4197 [NOI2015] 寿司晚宴分类: 状压 dp简要题解: 注意到n≤500n \le 500,至有一个大于2020 的质因数,而小于20的质数只有8个,我们可以令f[S][T]f[S][T] 表示第一个人选的小于20的质数集合为S,第一个人选的小于20的质数集合为T的方案数。 把2到500的数按照大于20的质因数(没有就是1)排序,依次讨论大质因

INCINCIBLE的博客 587

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

BZOJ 1257(分块思想)

题意: 给定n,kn,kn,k,问∑i=1nk mod i\sum_{i=1}^{n}k\bmod i∑i=1n​kmodi,其中1≤n,k≤1091\leq n,k\leq 10^91≤n,k≤109 题解: 由:k mod i=k−⌊ki⌋×ik \bmod i = k - \lfloor \frac{k}{i} \rfloor \times ikmodi=k−⌊ik​⌋×i 得:∑i=1nk mod i=n×k−∑i=1k⌊ki⌋×i\sum_{i=1}^{n}k\bmod i = n\times k

solego’s blog 356

BZOJ 2002 分块

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 思路:不使用动态树的做法: 将这个序列划分为 sqrt(n) 块,对于序列中每个元素维护一个ed[i],代表从i跳出当前所在的块后重点位置,times[i]表示从i跳出这个块所需要的步数 初始化过程中从后往前操作 对于查询操作,最多只需要sqrt(n)次加法即可跳出整

KKnotAlone的博客 404

莫队分块算法模板[BZOJ2038]

#include<stdio.h> #include<string.h> #include<ctype.h> #include<math.h> #include<iostream> #include<string> #include<set> #include<map> #include<vector> #include<queue> #include<bitset> #include<algori

snowy_smile的博客 1789

BZOJ 2120 数颜色 (分块+二分)

题意 给你一个长度为n的数组,每个数字代表一种颜色,有两种操作: 1 问你在区间L,R中有多少种颜色, 2 把第i个位置的颜色变为C 思路: 记录一个数组pre[i]表示i这个位置的颜色往左推到的最近的相同颜色的位置是哪里,那么对于一次查询来说,如果pre[i] &lt; L 就表示离他最近的颜色不再L区间里,之后我们可以分块儿,对于块内元素排序二分找,块外元素暴力去找不理解的看 ht...

wjmwsgj的博客 395

bzoj 2141: 排队 分块

这种题目如果分块O(N^1.5logN)水过去好像有点对不起自己。        直接写一个O(Nlog^2N)树套树好像也太暴力了一点。        然后写了一个O(N^1.5)分块。。。(所以你就水了这道题拉??)        考虑O(N^1.5logN),先离散化,然后分成N^0.5块,每一块用树状数组维护身高1-h的小盆友的个数。首先得到初始的答案,每次询问就对于一整块和零散的部

lych的博客 1157

BZOJ5089 最大连续子段和(分块)

  假设所有操作都是对整个序列的。考虑每个子区间,区间和与其被加的值构成一次函数关系。最大子段和相当于多个子区间取最大值,答案显然就在这些一次函数构成的下凸壳上。如果预处理出凸壳,只要在凸壳上暴力跳就可以回答询问了,因为加的都是正数,并且斜率不同的一次函数数量是O(n)的。暴力建凸壳的复杂度是O(n2)的。   那么考虑分块。每个块预处理出凸壳。区间加时,对于整块在凸壳上暴跳,零散部分暴力重构。...

weixin_30869099的博客 263

BZOJ 4241 分块

思路: 考虑分块 f[i][j]表示从第i块开头到j的最大值 cnt[i][j]表示从第i块开始到序列末尾j出现了多少次 边角余料处理一下就好啦~//By SiriusRen #include <cmath> #include <cstdio> #include <algorithm> using namespace std; const int N=100050; int n,q,Bloc

SiriusRen的博客 506

HN2015集训 永远亭的竹笋采摘

第一反应肯定是dp啦,然后就会愉快的T成一头象拔蚌。 那么,说说正解吧。 显然,选取的区间一定可以是两头为差值最小的。那就好办了,只需要预处理出所有的这样的区间,再dp即可,由于数据是随机生成的,所以这样的区间不会太多,有人验证了,好像是O(n)级别的。 预处理怎么搞?分块优化,pre[i][j]表示在第i块内的数,与j差值的最小值。每一块内的数取出来排序,两个下标跟着动就行了。 然后把那些

INCINCIBLE的博客 938

bzoj3188 [Coci 2011]Upit(分块)

Time Limit:10 SecMemory Limit:128 MB Description 你需要维护一个序列,支持以下4种操作。一,将区间(u,v)的数覆盖为C;二,将区间(u,v)的数依次加上一个以C为首项、C为公差的等差数列;三,将数C插入第i个位置;四,查询区间(u,v)的数的和。序列最初有n个数,一共会有Q次操作。保证结果在longlong范围内。...

dingqiongliang0363的博客 585

[bzoj5374][分块]完美的队列

Description 小D有n个std::queue,他把它们编号为1到n。小D对每个队列有不同的喜爱程度,如果有他不怎么喜欢的队列 占用了太大的内存,小D就会不开心。具体地说,如果第i个队列的size()大于a_i,小D就会对这个队列一直执行 pop()直到其size()小等于a_i。现在这些队列都是空的,小D觉得太单调了,于是他决定做一些操作。 每次操作都可以用l r x来描述,表示对编号...

Rose_max的博客 380
上一篇: BZOJ4166: 月宫的符卡序列 manacher
下一篇: BZOJ1513: [POI2006]Tet-Tetris 3D 二维线段树
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值