[arc086e]snuke line
题意:
有n个区间,询问对于$1\leq i\leq m$的每个i,有多少个区间至少包含一个i的倍数?
$1\leq N\leq 3\times 10^5$
$1\leq M\leq 10^5$
题解:
开始就想到了调和级数的复杂度,但是一直没想到反着统计。。。
正着统计区间是否包含$i$的倍数很麻烦,不妨反过来统计是否不包含,那么不包含的情况肯定是区间卡在两个$i$的倍数之间或者在$\lfloor\frac{m}{i}\rfloor\times i$和$M$之间,用调和级数的时间复杂度可以把所有倍数搞出来。那么可以将询问离线,按照$i$的倍数分段,然后用树状数组维护即可。
调和级数一个$log$,树状数组一个$log$,所以最后的时间复杂度是$O(mlogmlogn)$
貌似有很多dalao用不同姿势的分块碾了过去QAQ
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#define lb(x) (x&-x)
using namespace std;
struct task{
int x,id;
}a[];
int n,m,l,r,tot=,ans[],t[];
vector<int>g1[],g2[];
void add(int x,int v){
for(;x;x-=lb(x)){
t[x]+=v;
}
}
int query(int x){
int ret=;
for(;x<=m;x+=lb(x)){
ret+=t[x];
}
return ret;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d%d",&l,&r);
g1[r].push_back(l);
}
for(int i=;i<=m;i++){
ans[i]=n;
for(int j=;j<=m/i;j++){
a[++tot].x=i*(j-);
a[tot].id=i;
g2[i*j].push_back(tot);
}
a[++tot].x=(m/i)*i;
a[tot].id=i;
g2[m+].push_back(tot);
}
for(int i=;i<=m+;i++){
for(int j=,jj=g2[i].size();j<jj;j++){
ans[a[g2[i][j]].id]-=query(a[g2[i][j]].x+);
}
for(int j=,jj=g1[i].size();j<jj;j++){
add(g1[i][j],);
}
}
for(int i=;i<=m;i++)printf("%d\n",ans[i]);
return ;
}
[arc086e]snuke line的更多相关文章
- ARC068E - Snuke Line
原题链接 题意简述 给出个区间和.求对于任意,有多少个区间包含的倍数. 题解 考虑怎样的区间不包含的倍数. 对于的倍数和,满足的区间不包含任何的倍数. 于是转化为二维数点问题,可以用可持久化线段树解决 ...
- 【AtCoder - 2300】Snuke Line(树状数组)
BUPT2017 wintertraining(15) #9A 题意 有n个纪念品,购买区间是\([l_i,r_i]\).求每i(1-m)站停一次,可以买到多少纪念品. 题解 每隔d站停一次的列车,一 ...
- 【arc068E】Snuke Line
Portal -->arc068E (温馨提示:那啥..因为各种奇怪的我也不知道的原因这题的题号在某度上面显示出来是agc007F...然而下面是arc068E的题解qwq给大家带来不便之处真是 ...
- arc068 E: Snuke Line
首先要知道 (m/1 + m/2 + ... + m/m) 约为 mlogm 还有一个比较明显的结论,如果一个纪念品区间长度大于d,那么如果列车的停车间隔小于等于d,则这个纪念品一定能被买到 然后把区 ...
- AtCoder Regular Contest 068E:Snuke Line
题目传送门:https://arc068.contest.atcoder.jp/tasks/arc068_c 题目翻译 直线上有\(0-m\)这\(m+1\)个点,一共有\(m\)辆火车.第\(i\) ...
- AtCoder Regular Contest
一句话题解 因为上篇AGC的写的有点长……估计这篇也短不了所以放个一句话题解方便查阅啥的吧QwQ 具体的题意代码题解还是往下翻…… ARC 058 D:简单容斥计数. E:用二进制表示放的数字,然后状 ...
- NOIp模拟赛三十
心态崩了的一天 先Orz yrx 开场五分钟yrx大吼一声:“这B题不是原题吗” hjw:“对哦好像我也做过哦” 过了十分钟yrx又大吼一声:“这C题我也做过啊,洪水那题啊” 于是 像我这种傻逼A题一 ...
- 【AtCoder】ARC068
ARC 068 C - X: Yet Another Die Game 显然最多的就是一次6一次5 最后剩下的可能需要多用一次6或者6和5都用上 #include <bits/stdc++.h& ...
- Snuke's Subway Trip
すぬけ君の地下鉄旅行 / Snuke's Subway Trip Time limit : 3sec / Memory limit : 256MB Score : 600 points Problem ...
随机推荐
- 什么是2.5D与3D编辑模式
ZBrush®其实就是一个带有三维特性的二维软件,它不仅具有绘制二维图像的功能,而且也具有对三维物体进行编辑的功能,就是所谓的2.5D(Pixol技术). 学习ZBrush之前有必要了解一下2.5D的 ...
- JVM 原理
0 引言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点. 1 运行流 ...
- JS中检测数据类型的多种方法
面试当中经常会问到检测 js 的数据类型,我在工作当中也会用到这些方法.让我们一起走起!!! 首先给大家上一个案例 console.log(typeof "langshen"); ...
- HDU 1028 Ignatius and the Princess III(母函数整数拆分)
链接:传送门 题意:一个数n有多少种拆分方法 思路:典型母函数在整数拆分上的应用 /********************************************************** ...
- centos 登陆跳转指定目录
vi /etc/bashrc cd /usr/local 重启 reboot
- 我的Linux系统开始学习的过程
Linux系统,不知大家是否了解.接触计算机不多或对计算机不感冒的人可能对其比较陌生,曾经的我也是.上大学前的我的确对Linux一无所知,那时候接触面窄,都没有听说过此名字,上了大学后,身边的人有学习 ...
- python hashlib、configparse、logging
一.hashlib 1.Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 2.摘要算法 通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目 ...
- 题解 CF821D 【Okabe and City】
其实,这道题不用long long也能AC. 题意是给你一个矩阵,有一些格子被点亮有一些没有,每一次只能在被点亮的格子上面走. 然后你每一次都可以选择点亮一行或一排(非永久),现在问你最少点多少次可以 ...
- [terry笔记]一个在线美化sql的网站
http://www.dpriver.com/pp/sqlformat.htm 甚是好用.
- WinServer-IIS-js无法加载问题
IIS中无法加载JS文件错误 尝试下面的几种解决方法,一起用