Codeforces Round #535 E2-Array and Segments (Hard version)

题意:

给你一个数列和一些区间,让你选择一些区间(选择的区间中的数都减一),

求最后最大值与最小值的差值最大,并输出选择的区间

思路:

在n=300的时候,我们是枚举每个数作为最小值,应用所有覆盖它的区间,并且没

次都更行差值的最大值。

但是这里的n=1e5,所以我们不能用O(n*n*m),但是我们看到这里的m=300

所以可以从m入手,枚举区间,就是记录每个区间的两个端点,利用差分的思想,

来枚举更新最大值

这里说一下为什么枚举最小值,因为如果最大值也在这个区间则抵消,如果没在则

更好

#include<bits/stdc++.h>
using namespace std;
#define MAX 100005
int n,m;
vector<int>add[MAX],sub[MAX],a(MAX);
vector<pair<int,int > >b(MAX); void change(int l,int r,int x)
{
for(int i=l;i<=r;i++)
{
a[i]+=x;
}
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
for(int i=;i<m;i++) sub[i].clear();
for(int i=;i<m;i++) add[i].clear();
for(int i=;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=;i<m;i++)
{
scanf("%d %d",&b[i].first,&b[i].second);
b[i].first--;
b[i].second--;
sub[b[i].first].push_back(i);
add[b[i].second+].push_back(i);
}
int minn,maxn;
minn=maxn=a[];//注意这里不要习惯把minn=INF,maxn=0,因为a数组元素可能为负数,比如-1,这样ans=1,容易出错
for(int i=;i<n;i++)
{
maxn=max(maxn,a[i]);
minn=min(minn,a[i]);
}
int ans=maxn-minn;
int c=-;
for(int i=;i<n;i++)
{
//应用覆盖的区间
for(int j=;j<sub[i].size();j++)
{
int ind=sub[i][j];
change(b[ind].first,b[ind].second,-);
}
//消除之前的区间
for(int j=;j<add[i].size();j++)
{
int ind=add[i][j];
change(b[ind].first,b[ind].second,);
}
int minn=maxn=a[];
if(add[i].size()||sub[i].size())
{
for(int j=;j<n;j++)
{
maxn=max(maxn,a[j]);
minn=min(minn,a[j]);
}
if(maxn-minn>ans)
{
ans=maxn-minn;
c=i;
}
}
}
int len=;
int mask[MAX];
for(int i=;i<m;i++)
{
if(b[i].first<=c&&c<=b[i].second)
{
mask[len++]=i;
}
}
printf("%d\n",ans);
printf("%d\n",len);
for(int i=;i<len;i++)
{
printf("%d ",mask[i]+);
}
}
return ;
}

Codeforces Round #535 E2-Array and Segments (Hard version)的更多相关文章

  1. Codeforces Round #535 (Div. 3) E2. Array and Segments (Hard version) 【区间更新 线段树】

    传送门:http://codeforces.com/contest/1108/problem/E2 E2. Array and Segments (Hard version) time limit p ...

  2. CF #535 (Div. 3) E2 Array and Segments (Hard version) 利用线段树进行区间转移

    传送门 题意:    有m个区间,n个a[ i ] , 选择若干个区间,使得整个数组中的最大值和最小值的差值最小.n<=1e5,m<=300; 思路: 可以知道每个i,如果一个区间包含这个 ...

  3. E1. Array and Segments (Easy version)(暴力) && E2. Array and Segments (Hard version)(线段树维护)

    题目链接: E1:http://codeforces.com/contest/1108/problem/E1 E2:http://codeforces.com/contest/1108/problem ...

  4. CF E2 - Array and Segments (Hard version) (线段树)

    题意给定一个长度为n的序列,和m个区间.对一个区间的操作是:对整个区间的数-1可以选择任意个区间(可以为0个.每个区间最多被选择一次)进行操作后,要求最大化的序列极差(极差即最大值 - 最小值).ea ...

  5. Codeforces Round #535 (Div. 3) 题解

    Codeforces Round #535 (Div. 3) 题目总链接:https://codeforces.com/contest/1108 太懒了啊~好久之前的我现在才更新,赶紧补上吧,不能漏掉 ...

  6. Codeforces 1108E2 Array and Segments (Hard version) 差分, 暴力

    Codeforces 1108E2 E2. Array and Segments (Hard version) Description: The only difference between eas ...

  7. Codeforces Round #535 (Div. 3) [codeforces div3 难度测评]

    hhhh感觉我真的太久没有接触过OI了 大约是前天听到JK他们约着一起刷codeforces,假期里觉得有些颓废的我忽然也心血来潮来看看题目 今天看codeforces才知道居然有div3了,感觉应该 ...

  8. Codeforces Round #504 D. Array Restoration

    Codeforces Round #504 D. Array Restoration 题目描述:有一个长度为\(n\)的序列\(a\),有\(q\)次操作,第\(i\)次选择一个区间,将区间里的数全部 ...

  9. Codeforces 1108E2 Array and Segments (Hard version)(差分+思维)

    题目链接:Array and Segments (Hard version) 题意:给定一个长度为n的序列,m个区间,从m个区间内选择一些区间内的数都减一,使得整个序列的最大值减最小值最大. 题解:利 ...

随机推荐

  1. linux手动测试 rsync 的同步情况

    特别强调:此步很关键,如果这不能同步,后面的 inotify 配好了也不会同步数据. 1) 分别创建待同步数据 [root@rsync-client-inotify ~]# mkdir /data/{ ...

  2. AOP切面详解

    一.spring-aop.xml文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns= ...

  3. alert(1) to win 10

  4. Python比较两个excel文档内容的异同

    #-*- coding: utf-8 -*- #比对两个Excel文件内容的差异#---------------------假设条件----------------#1.源表和目标表格式一致#2.不存 ...

  5. 对微信小程序的研究2

    .json 后缀的 JSON 配置文件 .wxml 后缀的 WXML 模板文件 .wxss 后缀的 WXSS 样式文件 .js 后缀的 JS 脚本逻辑文件 JSON 配置 我们可以看到在项目的根目录有 ...

  6. selenium来识别数字验证码

    用python写一爬虫,需要模拟登陆,并且有数字验证码.通过selenium+pytesseract+PIL可以实现验证码识别并登陆.三大步: 用selenium截屏,此时截取的是整个页面的 用PIL ...

  7. zhanghao

    账号:wx8b9ddd1c943ce95f 密码:fa72de9a1721849edc7f41f8a81019e5

  8. php面试专题---7、文件及目录处理考点

    php面试专题---7.文件及目录处理考点 一.总结 一句话总结: 用脑子:基本文件操作和目录操作了解一波,不必强求 1.不断在文件hello.txt头部写入一行“Hello World”字符串,要求 ...

  9. 14days laravel

    <?php namespace App\Console\Commands\Mining; use App\Console\Commands\Core\BaseCommand; use App\R ...

  10. zabbix 接入钉钉机器人报警

    import requests import json import sys import os headers = {'Content-Type': 'application/json;charse ...