Codeforces 1167 E Range Deleting 双指针+思维
题意
给一个数列\(a\),定义\(f(l,r)\)为删除\(a\)中所有满足\(l<=a_i<=r\)的数后的数列,问有多少对\((l,r)\),使\(f(l,r)\)是一个非递减的数列
分析
若\(f(l,r)\)合法,则\(f(l,r+1),f(l,r+2),\dots,f(l,x)\)也都是合法的
把每个数在\(a\)中第一次出现的位置\(S\)和最后一次出现的位置\(T\),若\(f(l+1,r-1)\)合法则满足
\(max(T_{a_1},T_{a_2},\dots,T_{a_l})<min(S_{a_r},S_{a_{r+1}},\dots,S_{a_x})\)
\(max(T_{a_1},T_{a_2},\dots,T_{a_{i-1}})<S_{a_i} ~for~all~2<=i<=l\)
\(T_{a_i}<min(S_{a_{i+1}},S_{a_{i+2}},\dots,S_{a_x}) ~for~all~r<=i<=x\)
考虑双指针来扫\((l,r)\),先移动\(r\)指针使\(f(1,r-1)\)为合法,对答案的贡献为\(x-r+2\)
每次往后推\(l\)和\(r\),使\(f(l+1,r-1)\)合法
Code
#include<bits/stdc++.h>
#define fi first
#define se second
#define bug cout<<"--------------"<<endl
using namespace std;
typedef long long LL;
const double PI=acos(-1.0);
const double eps=1e-6;
const int inf=1e9;
const LL llf=1e18;
const int mod=1e9+7;
const int maxn=1e6+10;
int n,x;
int ll[maxn],rr[maxn];
int l[maxn],r[maxn];
int main(){
ios::sync_with_stdio(false);
//freopen("in","r",stdin);
cin>>n>>x;
memset(l,0x3f3f3f,sizeof(l));
memset(ll,0x3f3f3f,sizeof(ll));
for(int i=1,d;i<=n;i++){
cin>>d;
l[d]=min(i,l[d]);
r[d]=i;
}
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(l[i],ll[i+1]);
}
int R=x;
LL ans=0;
while(ll[R]>=r[R-1]&&R>=1) R--;
for(int i=0;i<x;i++){
if(i!=0&&l[i]<rr[i-1]) break;
while(R<=i+1||rr[i]>ll[R]){
R++;
}
ans+=x-R+2;
}
cout<<ans<<endl;
return 0;
}
Codeforces 1167 E Range Deleting 双指针+思维的更多相关文章
- Educational Codeforces Round 65 (Rated for Div. 2) E. Range Deleting(思维+coding)
传送门 参考资料: [1]:https://blog.csdn.net/weixin_43262291/article/details/90271693 题意: 给你一个包含 n 个数的序列 a,并且 ...
- 1167E - Range Deleting 双指针
题意:给出n个数的序列,并给出x,这n个数的范围为[1,x],f(L,R)表示删除序列中取值为[l,r]的数,问有几对L,R使得操作后的序列为非递减序列 思路:若[l,r]成立,那么[l,r+1],. ...
- codeforces 372 Complete the Word(双指针)
codeforces 372 Complete the Word(双指针) 题链 题意:给出一个字符串,其中'?'代表这个字符是可变的,要求一个连续的26位长的串,其中每个字母都只出现一次 #incl ...
- Codeforces Round #768 (Div. 2) D. Range and Partition // 思维 + 贪心 + 二分查找
The link to problem:Problem - D - Codeforces D. Range and Partition time limit per test: 2 second ...
- Codeforces Round #513 by Barcelona Bootcamp C. Maximum Subrectangle(双指针+思维)
https://codeforces.com/contest/1060/problem/C 题意 给两个数组,a数组有n个元素,b数组有m个元素,两个数组元素互相相乘形成n*m的矩阵,找一个子矩阵,元 ...
- Codeforces 305B:Continued Fractions(思维+gcd)
http://codeforces.com/problemset/problem/305/B 题意:就是判断 p / q 等不等于那条式子算出来的值. 思路:一开始看到 1e18 的数据想了好久还是不 ...
- codeforces 876 F. High Cry(思维)
题目链接:http://codeforces.com/contest/876/problem/F 题解:一道简单的思维题,知道最多一共有n*(n+1)/2种组合,不用直接找答案直接用总的组合数减去不符 ...
- 【CF1256】Codeforces Round #598 (Div. 3) 【思维+贪心+DP】
https://codeforces.com/contest/1256 A:Payment Without Change[思维] 题意:给你a个价值n的物品和b个价值1的物品,问是否存在取物方案使得价 ...
- codeforces 1443D,解法简单,思维缜密的动态规划问题
大家好,欢迎来到codeforces专题. 今天选择的问题是1443场次的D题,这题是全场倒数第三题,截止到现在一共通过了2800余人.这题的思路不算难,但是思考过程非常有趣,这也是这一期选择它的原因 ...
随机推荐
- peewee无外键连接
# 参考:https://blog.csdn.net/weixin_34273479/article/details/87587183 res = Name.select(Name, User.xxx ...
- Q_OBJECT提供了信号槽机制、国际化机、RTTI 的反射能力(cpp中使用Q_OBJECT导致无法处理moc,就需要#include “moc_xxx.h”)
只有继承了QObject类的类,才具有信号槽的能力.所以,为了使用信号槽,必须继承QObject.凡是QObject类(不管是直接子类还是间接子类),都应该在第一行代码写上Q_OBJECT.不管是不 ...
- 并不对劲的复健训练-bzoj5249:loj2472:p4364[2018多省联考]IIIDX
题目大意 给出\(n,k,d_1,...,d_n\)(\(n\leq 5\times 10^5,1<k\leq 10^9,d\leq 10^9,k\in R\)).有一个满足 对于每个点\(i\ ...
- Codeforces 1238C. Standard Free2play
传送门 题目别看错了,好像挺多人都读错了... 然后显然可以贪心,只有在需要用 $\text{magic crystals}$ 的时候才用 那么直接模拟即可 如果初始相邻两个突出的平台高度不连续那么我 ...
- python爬虫下正则各种字符串数据匹配
s = '*\/:?"<>|' #这9个字符在Windows系统下是不可以出现在文件名中的str1 = '\巴拉<1"!11[]>1*hgn/p:?|' # ...
- vue axios异步请求django
1,配置请求路径 (1),vue中的请求路径要与django视图路径相同. (2),vue中的路由路径也要和django视图路径相同,比如视图路径为127.0.0.1:8000:home/index, ...
- day12 css样式
目录 1.标签分类 2.浮动布局 3.margin塌陷 4.定位postion 5.背景图 一. 标签分类 默认在标准文档流 行内标签 span,a,em,i,strong,b,inp ...
- 几种常用的java 实现反转的方法———reverse
1.最简单的方法 public static String reverse1(String str) return new StringBuffer(str).reverse().toString() ...
- 解决IDEA报错Could not autowire. There is more than one bean of 'xxx' type
更新项目之后IDEA突然出现了这样的报错信息.显示Could not autowire. There is more than one bean of 'xxx' type.这个错误的意思是xxx类型 ...
- Tomcat----服务运行的容器
在介绍Tomcat之前,我们先介绍一个概念Servlet. Servlet是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP协议.从下图可以看出Ser ...