CodeForces 1141F2 贪心 离散化

题意

给定一个序列,要求我们找出最多数量的不相交区间,每个区间和都相等。

思路

一开始没有头绪,不过看到 \(n \le 1500\) 后想到可以把所有的区间和都保存下来。那么就可以遍历n2个区间和,用一个vector保存和相同的区间,(因为区间和可能很大,所以可以离散化)之后对于每个vector,都进行以右端点为主的排序,然后顺着取合法不相交区间,即可得到关于当前和的最多的不相交区间,最终得到答案。

  • 时间复杂度:小于 \(O(n^2logn)\)

AC代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <vector>
using namespace std; int n;
struct ab
{
int l;
int r;
bool operator < (const struct ab& c) const
{
return r < c.r;
}
};
map<long long, int>mm;
long long su[1505];
long long cc[2500005], co = 0;
vector<struct ab> D[2500005]; int main()
{
scanf("%d", &n);
su[0] = 0;
for (int i = 1; i <= n; ++i)
{
long long xx;
scanf("%lld", &xx);
su[i] = su[i - 1] + xx;
}
for (int i = 1; i <= n; ++i)
{
for (int j = i; j <= n; ++j)
{
if (!mm.count(su[j] - su[i - 1]))
{
mm[su[j] - su[i - 1]] = ++co;
cc[co] = su[j] - su[i - 1];
}
D[mm[su[j] - su[i - 1]]].push_back((struct ab){i, j});
}
}
int ansl = 0, ans = 0;
for (int i = 1; i <= co; ++i)
{
int ind = mm[cc[i]];
sort(D[ind].begin(), D[ind].end());
int rr = 0, anss = 0;
for (unsigned int j = 0; j < D[ind].size(); ++j)
{
if (D[ind][j].l > rr)
{
++anss;
rr = D[ind][j].r;
}
}
if (anss > ans)
{
ansl = i;
ans = anss;
}
}
printf("%d\n", ans);
int rr = 0;
for (unsigned int i = 0; i < D[ansl].size(); ++i)
{
if (D[ansl][i].l > rr)
{
rr = D[ansl][i].r;
printf("%d %d\n", D[ansl][i].l, D[ansl][i].r);
}
}
return 0;
}

CodeForces 1141F2 贪心 离散化的更多相关文章

  1. 洛谷P1966 火柴排队 贪心+离散化+逆序对(待补充QAQ

    正解: 贪心+离散化+逆序对 解题报告: 链接在这儿呢quq 这题其实主要难在想方法吧我觉得?学长提点了下说用贪心之后就大概明白了,感觉没有很难 但是离散化这里还是挺有趣的,因为并不是能很熟练地掌握离 ...

  2. [Codeforces 1199C]MP3(离散化+二分答案)

    [Codeforces 1199C]MP3(离散化+二分答案) 题面 给出一个长度为n的序列\(a_i\)和常数I,定义一次操作[l,r]可以把序列中<l的数全部变成l,>r的数全部变成r ...

  3. Codeforces Round #547 (Div. 3) F 贪心 + 离散化

    https://codeforces.com/contest/1141/problem/F2 题意 一个大小为n的数组a[],问最多有多少个不相交的区间和相等 题解 离散化用值来做,贪心选择较前的区间 ...

  4. Codeforces 1141F2(贪心、预处理)

    要点 一开始dp然后码力太辣鸡并且算法带假于是调了很久一交还WA在28-- 吐槽完毕.后来想拿栈优化dp时发现其实完全不需要dp,贪心选取即可,当前的不兼容就干脆不要它了,结果不会变差.然后想要什么就 ...

  5. CodeForces - 893D 贪心

    http://codeforces.com/problemset/problem/893/D 题意 Recenlty Luba有一张信用卡可用,一开始金额为0,每天早上可以去充任意数量的钱.到了晚上, ...

  6. Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 831D) - 贪心 - 二分答案 - 动态规划

    There are n people and k keys on a straight line. Every person wants to get to the office which is l ...

  7. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 828D) - 贪心

    Arkady needs your help again! This time he decided to build his own high-speed Internet exchange poi ...

  8. Liebig's Barrels CodeForces - 985C (贪心)

    链接 大意:给定$nk$块木板, 要制作$n$个$k$块板的桶, 要求任意两桶容积差不超过$l$, 每个桶的容积为最短木板长, 输出$n$个桶的最大容积和 假设最短板长$m$, 显然最后桶的体积都在$ ...

  9. 贪心+离散化+线段树上二分。。。 Samara University ACM ICPC 2016-2017 Quarterfinal Qualification Contest G. Of Zorcs and Axes

    题目链接:http://codeforces.com/gym/101149/problem/G 题目大意:给你n对数字,为(a[i], b[i]),给你m对数字,为(w[i], c[i]).给n对数字 ...

  10. CodeForces - 93B(贪心+vector<pair<int,double> >+double 的精度操作

    题目链接:http://codeforces.com/problemset/problem/93/B B. End of Exams time limit per test 1 second memo ...

随机推荐

  1. Python 提取PDF文本和图片

    从PDF中提取内容能帮助我们获取文件中的信息,以便进行进一步的分析和处理.此外,在遇到类似项目时,提取出来的文本或图片也能再次利用.要在Python中通过代码提取PDF文件中的文本和图片,可以使用 S ...

  2. 01-spfile和pfile的区别,生成,加载和修复

    oracle数据库的配置文件指的是系统在启动到"nomount"阶段需要加载的文件,也叫做pfile或者spfile,但是其实pfile和spfile是不同的文件. 不同的数据库配 ...

  3. Kafka的零拷贝技术Zero-Copy

    传统的拷贝过程 流程步骤: (1)操作系统将数据从磁盘文件中读取到内核空间的页面缓存: (2)应用程序将数据从内核空间读入用户空间缓冲区: (3)应用程序将读到数据写回内核空间并放入socket缓冲区 ...

  4. 错误记录-FileStream访问被拒绝

    简介: 问题:因项目需要,软件需要读取授权文件中的密文与本机验证码做一定的逻辑比对,使用FileStream实现文件的读取,在本机调试没问题,但在其他同事电脑上有一些出现授权一直不通过的情况. --M ...

  5. "科来杯"第十届山东省大学生网络安全技能大赛决赛复现WP

    从朋友那里得来的附件,感觉题目有意思,简单复现一下 MISC 简单编码 1.题目信息 0122 061 1101011 0172 0122 0105 061 1011010 0127 0154 014 ...

  6. 机器学习实战5-KMeans聚类算法

    概述 聚类 VS 分类 有监督学习 VS 无监督学习 sklearn中的聚类算法 KMeans KMeans参数&接口 n_clusters n_clusters就是KMeans中的K就是告诉 ...

  7. 推理(Inference)与预测(Prediction)

    在机器学习的背景下,很多人似乎混淆了这两个术语.这篇文章将试图澄清我们所说的这两个词是什么意思,每一个词在哪里有用,以及它们是如何应用的.在这里,我将举几个例子来直观地理解两者之间的区别. 推理和预测 ...

  8. 【译】NoClassDefFoundError和ClassNotFoundException的不同(转)

    https://www.jianshu.com/p/93d0db07d2e3 本文翻译自:Difference between NoClassDefFoundError vs ClassNotFoun ...

  9. 2023浙江省大学生信息安全竞赛决赛 Cry+Misc wp

    搞到了一些附件,做做看难度如何. CRYPTO R_r 1.题目信息 查看代码 from Crypto.Util.number import * import random from gmpy2 im ...

  10. typeid关键词

    typeid是c++的关键字,typeid操作符的返回结果是名为type_info的标准库类型的对象的引用(在头文件typeinfo中定义) ISO C++标准并没有确切定义type_info,它的确 ...