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余人.这题的思路不算难,但是思考过程非常有趣,这也是这一期选择它的原因 ...
随机推荐
- sql server安装图解
1.进入安装中心:可以参考硬件和软件要求.可以看到一些说明文档 2.选择全新安装模式继续安装 3.输入产品秘钥:这里使用演示秘钥进行 4.在协议中,点击同意,并点击下一步按钮,继续安装 5.进入全局规 ...
- 微信小程序上传图片及本地测试
前端(.wxml) <view id="view1"> <view id="btns"> <image id="ima1 ...
- JS基础_for循环练习3
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- [转载] ReLU和BN层简析
[转载] ReLU和BN层简析 来源:https://blog.csdn.net/huang_nansen/article/details/86619108 卷积神经网络中,若不采用非线性激活,会导致 ...
- java代码实现图片内容转文字
前言 现在的手机已经可以实现拍照转文字了.作为一名程序员,得使用java代码实现这一功能,虽然可能没啥用!!! pom.xml 添加依赖 <dependency> <groupId& ...
- python 访问权限
访问权限 权限: 公有的:类中的普通属性和方法,默认都是公有的,可以在类的内部.外部.子类中使用 私有的:定义是在前面加两个'_',只能在本类的内部使用,不能再外部及子类中使用 示例: class P ...
- clientHeight和offsetHeight
clientHeight:包括padding但不包括border.水平滚动条.margin的元素的高度.对于inline的元素这个属性一直是0,单位px,只读元素. offsetHeight:包括pa ...
- vue 编辑
点击文字修改 <div class="baseInfo"> <p class="title">基本信息</p> <p ...
- jboss日志的自定义
最近由于想着每次调试socket接收数据情况都需要源码debug好麻烦,要是能把接收到的数据输出到一个单独的日志文件,那出问题的时候,查看问题就方便多了. log4j的日志是可以很方便自定义的,只是这 ...
- mysql 添加远程管理用户
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION; 这一条是添加全权限的用户,用户名和密码 ...