codeforces1167 E. Range Deleting(双指针)
E. Range Deleting
单调性:对于每一个左端点lll,当左端点右移(增大)的过程中,右端点也一定右移(增大)
有了上述单调性考虑双指针表示f(i,j)f(i,j)f(i,j)
预处理出以下数组
①:l[i]
值是i
的最小数组下标
②:r[i]
值是i
的最大数组下标
③:ll[i]
值是i~x
的最小数组下标
④:rr[i]
值是1~i
的最大数组下标
#define IO ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
#pragma GCC optimize(2)
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
constexpr int N=1000010;
int a[N],n,x;
int l[N],r[N],ll[N],rr[N];
int main()
{IO;cin>>n>>x;memset(l,0x3f,sizeof l);memset(ll,0x3f,sizeof ll);memset(r,-1,sizeof r);memset(rr,-1,sizeof rr);for(int i=1;i<=n;i++){cin>>a[i];l[a[i]]=min(l[a[i]],i);r[a[i]]=max(r[a[i]],i);}// rr[i] 1~i最右边的位置// ll[i] i~x最左边的位置for(int i=1;i<=x;i++) rr[i]=max(rr[i-1],r[i]);for(int i=x;i>=1;i--) ll[i]=min(ll[i+1],l[i]);long long res=0;// [1,pl) 以及 (pr,x] 不存在逆序对int pl=1,pr=x;while(pl<=x&&rr[pl-1]<=l[pl]) pl++;while(pr>=1&&ll[pr+1]>=r[pr]) pr--; for(int i=1,j=pr;i<=pl;i++){while(j<=x&&(j<i||rr[i-1]>=ll[j+1])) j++;res+=x-j+1;}cout<<res<<'\n';return 0;
}
codeforces1167 E. Range Deleting(双指针)相关推荐
- python编程新手常犯的错误_Python程序员常犯的10个错误
BY- SENIOR SOFTWARE ENGINEER @TOPTAL About Python 关于Python Python is an interpreted, object-oriented ...
- [转]python各模块的学习
[-] 01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 ...
- 双指针问题最简单的教程(1)
什么样的问题适合用双指针技巧?当问题是从一个有序的数组或链表中,找到一个元素的子集,该子集需要满足某种限制. 这时候就特别适合用双指针.这个子集可能是某两个元素,某三个元素,甚至是一个子数组. 1 举 ...
- 7. Leetcode 611. 有效三角形的个数 (数组-双向双指针)
给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数.示例 1:输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 ( ...
- 5. Leetcode 15. 三数之和 (数组-双向双指针)
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组.注意:答案中不可以包含重复的三元 ...
- 七十五、栈+双指针,头条当年接雨水问题
@Author:Runsen @Date:2020/09/30 清晨的时候,熟睡中的我被咯吱咯吱作响的窗子吵醒,起身一看,窗外正是狂风大作,不一会儿便下起了爆雨,来也快,去也快,不一会儿天亮便放晴了, ...
- LeetCode——双指针
双指针 双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务. 目录 有序数组的 Two Sum 两数平方和 反转字符串中的元音字符 回文字符串 归并两个有序数组 判断链表是否存在环 最长 ...
- 602B. Approximating a Constant Range
B. Approximating a Constant Range:题目 可恶啊,不知道为什么我双指针的代码不过,重新写了个..... #include <bits/stdc++.h> u ...
- 算法(10)-leetcode-explore-learn-数据结构-链表双指针技巧
leetcode-explore-learn-数据结构-链表2 1.概述 2.例题 2.1 环形链表判断 2.2 环形链表2 2.3 相交链表 2.4 删除链表的倒数第N个节点 3.小结 本系列博文为 ...
最新文章
- python的异常处理机制
- 第三次学JAVA再学不好就吃翔(part103)--BufferedInputStream和BufferOutputStream
- 从迁移到Java 7的小技巧
- 解决win10使用GPU跑程序遇到的一系列报错
- 互联网裁员屡见不鲜,但有时互联网的裁员却不太体面
- 【Datapump】expdp和impdp中parallel参数解释
- 戒指戴在不同手指上的含义
- Xcode6中如何添加pch文件
- 怀恋曾经老飞飞那些厉害的功能总结贴2023
- 如何创建一个最简单的Windows桌面应用程序 (C++)
- lua 随机数 math.random()和math.randomseed()用法
- 符合Scorm的LMS系统
- 家用洗地机怎么选?2023高性价比家用洗地机推荐
- 一款非常不错的高仿UC浏览器源码下载
- Android lunch分析以及产品分支构建
- 谷歌404页面html,简洁404页面HTML好看的404错误页源码
- 用CH340模块进行程序烧写以及供电
- GetTickCount() 的另一种实现方法
- 【论文阅读】 Privacy-Preserving Byzantine-Robust Federated Learning via Blockchain Systems
- java怎么做沙子合并,那些java沙子游戏如何跟踪这么多粒子?
热门文章
- 金蝶凭证序时簿在哪_来了!金蝶日常账务处理大全
- linux配置文件引用时间,linux时间设置、screen使用、命令分类、hash作用、命令引用及history命令...
- lnmp无法远程连接mysql_MySQL(一):设置root 可以远程连接MySQL
- python变量类型怎么决定的_Python数据类型提示痛点的解决方案探讨
- 数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型的概念
- [C++11]常量表达式函数
- [Java基础]SimpleDateFormat类基础
- Bridge(桥接)--对象结构模式
- 挖矿为什么要用显卡_数字货币行情分析 2020/07/17 为什么大佬们都转向显卡挖矿了?...
- 双向dcdc变换器simulink仿真_二极管箝位五电平变换器Simulin仿真