Codeforces301D. Yaroslav and Divisors
时间:2019-09-17
本文章向大家介绍Codeforces301D. Yaroslav and Divisors,主要包括Codeforces301D. Yaroslav and Divisors使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意:2e5的全排列 每次询问一个区间有多少对数 满足一个数是另一个数的倍数
题解:考虑离线来做 看到有个说法说 在处理有两种约束的问题时 一般用数据结构边插入边询问的方式
这个题正是如此 我们用sum_i表示处理完1-i时所有的对数 那么可以用sum_r - sum_l-1得到一个答案
这个答案显然是多包含了一部分 一个数在前面 他的倍数在区间里这种方式
那么我们在插入到区间左端点的时候就可以很巧妙的 减去这一段贡献 插入到区间右端点的时候 加上一段贡献
#include <bits/stdc++.h> using namespace std; const int MAXN = 2e5 + 5; int n, m; int a[MAXN], b[MAXN]; int l[MAXN], r[MAXN]; int sum[MAXN]; int ans[MAXN]; vector<int> li[MAXN], ri[MAXN]; void add(int x) { for(int i = x; i <= n; i += (i & -i)) sum[i]++; } int ask(int x) { int res = 0; for(int i = x; i >= 1; i -= (i & -i)) res += sum[i]; return res; } int main() { scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) scanf("%d", &a[i]), b[a[i]] = i; for(int i = 1; i <= m; i++) { scanf("%d%d", &l[i], &r[i]); li[l[i]].push_back(i); ri[r[i]].push_back(i); } for(int i = 1; i <= n; i++) { for(int j = 0; j < li[i].size(); j++) ans[li[i][j]] -= ask(r[li[i][j]]) - ask(i - 1); for(int j = 1; j * a[i] <= n; j++) add(b[j * a[i]]); for(int j = 0; j < ri[i].size(); j++) ans[ri[i][j]] += ask(i) - ask(l[ri[i][j]] - 1); } for(int i = 1; i <= m; i++) cout << ans[i] << endl; return 0; }
原文地址:https://www.cnblogs.com/lwqq3/p/11535531.html
- 探讨Android中的内置浏览器和Chrome
- java并发编程学习: 阻塞队列 使用 及 实现原理
- CSS魔法堂:说说Float那个被埋没的志向
- Netbeans配置Xdebug
- rpc框架: thrift/avro/protobuf 之maven插件生成java类
- WebComponent魔法堂:深究Custom Element 之 从过去看现在
- 数据可视化-EChart2.0使用总结1
- JavaScript事件概览
- gradle项目与maven项目相互转化
- rpc框架之gRPC 学习 - hello world
- Angular Service入门
- spring:如何用代码动态向容器中添加或移除Bean ?
- WebComponent魔法堂:深究Custom Element 之 标准构建
- druid 数据源 使用属性文件的一个坑
- 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 数组属性和方法
- JVM系列之:JIT中的Virtual Call
- 速读原著-UnixLinux基础(五)
- Celery在Django中的简单应用
- 基于数据库Binlog 的业务系统操作日志实现方案(阿里中间件Canal)
- 速读原著-UnixLinux基础(三)
- 手撸实现UDP和TCP通信
- 3分钟短文 | PHP获取函数参数名,和类定义的常量,都要反射!
- 3分钟短文 | Laravel模型获取最后一条插入记录的ID编号
- 3分钟短文 | Laravel 模型的get find first方法你分清咋用了吗?
- 3分钟短文 ! Laravel拼装SQL子查询的最佳实现
- 对java中的泛型的理解
- 解决elasticsearch集群Unassigned Shards无法reroute的问题
- 一次系统扩容引起的elasticsearch故障及恢复
- WPF SharpDx 性能优化方法
- java中的reference(四): WeakReference的应用--ThreadLocal源码分析