CodeForces 652C Foe Pairs(思维题)
时间:2020-01-07
本文章向大家介绍CodeForces 652C Foe Pairs(思维题),主要包括CodeForces 652C Foe Pairs(思维题)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
http://codeforces.com/problemset/problem/652/C
给出一个含有n个数的排列,给出m组数对(ai,bi),问n中有多少个区间是不包含任意一个数对的? (1<=n,m<=3e5, 1<=ai,bi<=n, ai≠ bi)
例如:第一组样例:区间[1,3]是含有第一个数对(3,2),区间[1,4]两个数对都包含,所以这两个区间是不计算的。答案是[1,1],[2,2],[3,3],[4,4],[1,2]这5个区间
思路:
用一个数组f[]记录每个位置可以延伸的最大右端点。这样可以根据数组f[],遍历每个位置i,计算以i为左区间而不包含任意数对的区间个数,达到计算全部区间的效果。
先对每个数对的所在左区间更新可达最大右端点。
再从后往前再更新一次,使得左边点的延伸最大右端点一定是 小于等于任意右边点的延伸最大右端点。使得中间不包含任意数对。
代码:
#include<algorithm> #include<cstdio> #include<cstring> #include<queue> #define inf 0x3f3f3f3f using namespace std; typedef long long ll; const int maxn=3e5+100; int f[maxn],p[maxn]; int main() { int n,m,x,y; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%d",&x); f[i]=n;//初始化可延伸右端点为n p[x]=i;//记录每个数的位置 } for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); int l=min(p[x],p[y]);//得到每个数对的左右区间 int r=max(p[x],p[y]); f[l]=min(f[l],r-1);//记录每个左端点可达最大延伸右端点 } for(int i=n-1;i>=1;i--) { f[i]=min(f[i],f[i+1]);//更新每个位置的可达最大右端点 } ll ans=0; for(int i=1;i<=n;i++) ans+=f[i]-i+1;//计算以i为左区间,可以不包含任意数对的区间个数 printf("%lld\n",ans); }
原文地址:https://www.cnblogs.com/xiongtao/p/12161458.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【简记】Linux 计划任务 Crontab
- VS Code 免密登录Linux服务器
- Linux部署私钥实现免密登录
- 搭建Jenkins+tomcat+maven+Gitlab持续部署/回滚系统
- Java--注解
- 如何在 Ubuntu 20.04 上安装 Jenkins
- 在 Linux 下如何检查内存使用率
- 3分钟短文 | MySQL存时间,到底该用timestamp还是datetime?
- js中class的继承的基础用法
- JavaScript 设计模式学习总结与感悟(开发&面试必备)
- 3分钟短文 | PHP多维数组搜索值,就只能for循环?这样写更高效
- 如何获得tomcat管理员账号
- ant target间的dependency
- 如何用ant将JSP项目打成war包
- 3分钟短文 | MySQL备份和迁移sql文件,这个指令基础又关键