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基础——CPU详解

    一 五大组成单元=>三大核心组件 组成计算机五大单元可以合并成三大核心组件:CPU.IO设备.主存储器 1.控制单元+算数逻辑单元=>CPU 2.主存储器,即主記憶體 3.输入单元Inpu ...

  2. Rethinking Point Cloud Registration as Masking and Reconstruction论文阅读

    Rethinking Point Cloud Registration as Masking and Reconstruction 2023 ICCV *Guangyan Chen, Meiling ...

  3. WPF 笔迹算法 从点集转笔迹轮廓

    本文将告诉大家一些笔迹算法,从用户输入的点集,即鼠标轨迹点或触摸轨迹点等,转换为一个可在界面绘制显示笔迹画面的基础数学算法.尽管本文标记的是 WPF 的笔迹算法,然而实际上本文更侧重基础数学计算,理论 ...

  4. 安信可开发环境构建-基于Ai-WB2系列 和 Ai-M61 或 Ai-M62 (环境上下文切换)

    首先,对于Ai-WB2系列环境的构建官方文档已经讲的非常明白了,这里不做阐述如下链接所示https://blog.csdn.net/Boantong_/article/details/12848091 ...

  5. calico网络异常,不健康

    解决calico/node is not ready: BIRD is not ready: BGP not established withxxx calico有一个没有ready,查了一下是没有发 ...

  6. OpenGL 着色器详解

    1. GLSL语言 glsl语言是用来编写着色器的,通过一段一段包含main函数的程序片段,告诉渲染引擎怎么去渲染内容. glsl语言的语法有点类似c语言风格,只是增加了一些特有的关键字来修饰变量,下 ...

  7. Redis Functions 介绍之一

    Redis提供了编程接口(programming interface)可以让你在Redis服务器端执行客户的脚本. 一个重大的变化就是从Redis 7开始,你可以选择使用Redis Functions ...

  8. DM数据库SQL分页案例

    DM一哥们找我优化条分页的SQL语句,结果集很小返回99行数据,废话不说安排一下. 原始SQL语句如下,保密要求,给真实的表名换了别名: SELECT count(*) FROM (SELECT TM ...

  9. 【Javaweb】了解link标签

    link标签的属性 标签就是定义文档和外部的关系,常见用途是链接样式表.通常指存在于head部分. 规定被连接文档的位置 <link rel='stylesheet' href='./ease. ...

  10. .NET开源且好用的权限工作流管理系统

    前言 系统权限管理.工作流是企业应用开发中很常见的功能,虽说开发起来难度不大,但是假如从零开始开发一个完整的权限管理和工作流平台的话也是比较耗费时间的.今天推荐一款.NET开源且好用的权限工作流管理系 ...