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 大学 B 组

  2. PostgreSQL学习笔记-7.基础知识:子查询、自增、PRIVILEGES 权限

    子查询 子查询或称为内部查询.嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句.一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询可以与 SELEC ...

  3. Docker 安装 Redis 单机&集群总结

    前言 Redis 是一个开源的使用 ANSI C 语言编写.遵守 BSD 协议.支持网络.可基于 内存 . 分布式 .可选持久性的键值对( Key-Value )存储数据库 redis版本:redis ...

  4. 解决 Steam 无法自动登录的问题

    前言 劳动节假期闲的没事,重装一下电脑,结果电脑的 Steam 不会自动登录了,每次重启电脑就要重新输入密码和令牌.查了一下居然是 Windows 凭据管理器默认不会自动启动的问题. 解决方法 打开计 ...

  5. CF1878 A-G 题解

    前言 赛时代码可能比较难看. 为什么 Div3 会出 4 道数据结构. A 判定 \(a\) 中是否有 \(k\) 即可. 赛时代码 B 奇怪的构造题. 令 \(a_1=1,a_2=3\),其他项由上 ...

  6. 2023 版 Java和python开发线性代数探索

    目录 前景提示 需求 分析 1.初始化不需要指定矩阵的尺寸,并且可以直接传入数据. 2.可以计算2x2矩阵的逆 3.可以做2x2的矩阵乘法 Java版本开发 一. 开发详情 1.开发一个子类,如图所示 ...

  7. Go 常用标准库之 fmt 介绍与基本使用

    Go 常用标准库之 fmt 介绍与基本使用 目录 Go 常用标准库之 fmt 介绍与基本使用 一.介绍 二.向外输出 2.1 Print 系列 2.2 Fprint 系列 2.3 Sprint 系列 ...

  8. Kubernetes 迁移节点 Kubelet 数据存储目录

    1.概述 默认Kubernetes节点Kubelet数据目录在/var/lib/kubelet,如果在部署前没有做好规划,其实默认就存储在系统盘/分区下了,这可能会引发一些问题: 磁盘空间限制: 系统 ...

  9. 如何使用markdown

    关于如何使用markdown写博客 markdown的语法 代码的插入 电脑Table建上面上面的键输入三个点``` 然后输入语言+回车 c语言中第一个程序 #include<stdio.h&g ...

  10. C# -WebAPIOperator.cs

    说明:一个用C#编写的WebAPI操作类,只写了Get Post 部分. using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System ...