题目描述:

给你m个位于[1,n]的区间p,现在有长度为K的区间b和c。设对于区间$p[i]$,定义$a[i]$为$p[i]$分别与b,c相交长度的较大值,现在问区间b和c位于何处时,$\sum p_{i}$最大,输出这个最大值,n,m,K<=2000

好题目,dkr yyds!

暴力怎么搞?暴力枚举b,c的位置,然后O(n)计算,总时间$O(n^{3})$

考虑优化这个暴力,每次只暴力枚举b的位置,并统计所有pi与b相交的长度之和。如果c和pi相交比b大,那么会产生额外贡献,这个额外贡献的值就是c与pi相交长度减掉b与pi相交的长度

考虑每次都把c区间从左到右一格一格挪,挪进第i个区间的长度超过ai时,开始产生贡献,每超过一格,贡献就+1。每挪一次,我们就在c右端点的位置打上+1标记

然而挪多了可能不再增加新贡献,就停止打+1。

挪出去了还会减少贡献,开始打-1,直到贡献减成0,停止打-1

实际操作中也不必真的挪c,也不用记录什么时候减到0,推位置就可以了

怎么推位置呢?分K和xi长度大小讨论,推吧推吧就出来了,细节比较多

+1和-1这些标记都是连续的,差分就行。那么求两次前缀和即可

总时间$O(n^{2})$

 1 #include <cstdio>
2 #include <cstring>
3 #include <algorithm>
4 #define N1 2005
5 #define ll long long
6 #define mod 998244353
7 using namespace std;
8
9 int n,m,K;
10 int l[N1],r[N1],a[N1];
11 int adds[N1],addt[N1],subs[N1],subt[N1];
12 ll sum1[N1],sum2[N1];
13
14 void clr()
15 {
16 memset(adds,0,sizeof(adds));
17 memset(addt,0,sizeof(addt));
18 memset(subs,0,sizeof(subs));
19 memset(subt,0,sizeof(subt));
20 memset(sum1,0,sizeof(sum1));
21 memset(sum2,0,sizeof(sum2));
22 }
23
24 int main()
25 {
26 freopen("a.txt","r",stdin);
27 scanf("%d%d%d",&n,&m,&K);
28 for(int i=1;i<=m;i++) scanf("%d%d",&l[i],&r[i]);
29 ll ANS=0,ans=0;
30 for(int i=1;i+K-1<=n;i++)//l~l+K-1
31 {
32 int L=i,R=i+K-1; ans=0;
33 for(int j=1;j<=m;j++)
34 {
35 a[j]=max(0,min(r[j],i+K-1)-max(l[j],i)+1);
36 ans+=a[j];
37 }
38 for(int j=1;j<=m;j++)
39 {
40 ++adds[l[j]+a[j]];
41 ++addt[min(r[j]+1,min(l[j]+K,n+1))]; //addt: +1的结束位置 +1
42 ++subs[max(min(l[j]+K,n+1),r[j]+1)]; //subs: -1start_point
43 ++subt[min(r[j]-a[j]+1+K,n+1)]; //subt: -1end_point +1
44 }
45 ll tmp=0;
46 for(int j=1;j<=n;j++) sum1[j]+=sum1[j-1]+adds[j]-addt[j]-subs[j]+subt[j];
47 for(int j=1;j<=n;j++) sum2[j]=sum2[j-1]+sum1[j], tmp=max(tmp,sum2[j]);
48 ANS=max(ANS,ans+tmp);
49 clr();
50 }
51 printf("%lld\n",ANS);
52 return 0;
53 }

CF1452E Two Editorials (思维题,暴力+差分)的更多相关文章

  1. 洛谷 P4749 - [CERC2017]Kitchen Knobs(差分转换+dp,思维题)

    题面传送门 一道挺有意思的思维题. 首先有一个 obvious 的结论,就是对于每个炉子,要么转到哪里都符合条件,要么存在唯一的最大值.对于转到哪儿都符合条件的炉子我们 duck 不必考虑它,故我们只 ...

  2. PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记

    PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...

  3. HDU 1029 Ignatius and the Princess IV / HYSBZ(BZOJ) 2456 mode(思维题,~~排序?~~)

    HDU 1029 Ignatius and the Princess IV (思维题,排序?) Description "OK, you are not too bad, em... But ...

  4. 计蒜客 28319.Interesting Integers-类似斐波那契数列-递推思维题 (Benelux Algorithm Programming Contest 2014 Final ACM-ICPC Asia Training League 暑假第一阶段第二场 I)

    I. Interesting Integers 传送门 应该是叫思维题吧,反正敲一下脑壳才知道自己哪里写错了.要敢于暴力. 这个题的题意就是给你一个数,让你逆推出递推的最开始的两个数(假设一开始的两个 ...

  5. 7月15日考试 题解(链表+状压DP+思维题)

    前言:蒟蒻太弱了,全打的暴力QAQ. --------------------- T1 小Z的求和 题目大意:求$\sum\limits_{i=1}^n \sum\limits_{j=i}^n kth ...

  6. zoj 3778 Talented Chef(思维题)

    题目 题意:一个人可以在一分钟同时进行m道菜的一个步骤,共有n道菜,每道菜各有xi个步骤,求做完的最短时间. 思路:一道很水的思维题, 根本不需要去 考虑模拟过程 以及先做那道菜(比赛的时候就是这么考 ...

  7. cf A. Inna and Pink Pony(思维题)

    题目:http://codeforces.com/contest/374/problem/A 题意:求到达边界的最小步数.. 刚开始以为是 bfs,不过数据10^6太大了,肯定不是... 一个思维题, ...

  8. ZOJ 3829 贪心 思维题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题.自己智商不够.不敢搞,想着队友智商 ...

  9. 洛谷P4643 [国家集训队]阿狸和桃子的游戏(思维题+贪心)

    思维题,好题 把每条边的边权平分到这条边的两个顶点上,之后就是个sb贪心了 正确性证明: 如果一条边的两个顶点被一个人选了,一整条边的贡献就凑齐了 如果分别被两个人选了,一作差就抵消了,相当于谁都没有 ...

随机推荐

  1. MyBatis功能点二:MyBatis提供的拦截器平台

    前面关于MyBatis功能点二plugin已经介绍了一些应用及其实现的底层代码,本文总结MyBatis提供的拦截器平台框架体系. 通过MyBatis功能点二:从责任链设计模式的角度理解插件实现技术 - ...

  2. Python语法进阶(2)- 正则表达式

    1.初识正则表达式 1.1.什么是正则表达式 正则表达式是一个特殊的字符序列,便于检查一个字符串是否与某种模式匹配:应用于字符串,在字符串中通过复杂的过滤筛选等操作得到我们想要的数据: 正则表达式的特 ...

  3. Java高频面试题70道

    1.作用域public,private,protected,以及不写时的区别? 答:区别如下: 作用域  当前类 同一packag 子孙类 其他package public √ √ √ √ prote ...

  4. Zookeeper基础入门

    Zookeeper简介 基本概念 Zookeeper是一个开源的分布式协调服务.其设计目标是将那些复杂的容易出错的分布式一致性服务封装起来,以简单的接口提供给用户使用.它是一个典型的分布式数据一致性的 ...

  5. Tensorflow 2.x入门教程

    前言 至于为什么写这个教程,首先是为了自己学习做个记录,其次是因为Tensorflow的API写的很好,但是他的教程写的太乱了,不适合新手学习.tensorflow 1 和tensorflow 2 有 ...

  6. 深度学习分类问题中accuracy等评价指标的理解

    在处理深度学习分类问题时,会用到一些评价指标,如accuracy(准确率)等.刚开始接触时会感觉有点多有点绕,不太好理解.本文写出我的理解,同时以语音唤醒(唤醒词识别)来举例,希望能加深理解这些指标. ...

  7. MySQL通过bin log日志恢复数据|手撕MySQL|对线面试官

    关注微信公众号[程序员白泽],进入白泽的知识分享星球 前言 作为<手撕MySQL>系列的第二篇文章,今天介绍一下MySQL的二进制日志(bin log),注意不要和MySQL的InnoDB ...

  8. go 中 sort 如何排序,源码解读

    sort 包源码解读 前言 如何使用 基本数据类型切片的排序 自定义 Less 排序比较器 自定义数据结构的排序 分析下源码 不稳定排序 稳定排序 查找 Interface 总结 参考 sort 包源 ...

  9. 无状态子域名爆破工具:ksubdomain

    概述 开源地址:https://github.com/knownsec/ksubdomain 二进制文件下载:https://github.com/knownsec/ksubdomain/releas ...

  10. linux添加串口权限

    通过添加到用户组的方式实现1.由于tty属于"dialout"组别,比如你的用户名是blue, 先命令查看下用户隶属的组别 groups blue 2.如果没有隶属"di ...