两种做法都说一说吧。。。

题意很明确。

1.数论分块

对于一个 \(d\) 和给定的 \((l,r)\),\((l,r)\) 对其造成贡献的条件很明显是 \(\lfloor \frac {l-1} d \rfloor \ne \lfloor \frac r d \rfloor\)。

然后一个数论分块就没了。

只跑了 4s 还是挺离谱的,应该吊打了大部分数论分块。

#include<cstdio>
#include<cctype>
typedef unsigned ui;
const ui M=1e5+5;
ui n,m,s[M];double inv[M];
inline void write(ui n){
static char s[10];ui top(0);while(s[++top]=n%10^48,n/=10);while(putchar(s[top--]),top);
}
inline ui read(){
ui n(0);char s;while(!isdigit(s=getchar()));while(n=n*10+(s&15),isdigit(s=getchar()));return n;
}
inline ui min(const ui&a,const ui&b){
return a>b?b:a;
}
signed main(){
ui i,L,R,l,r,x,y;m=read();n=read();
for(i=1;i<=n;++i)inv[i]=1./i+1e-15;
while(m--){
l=read()-1;r=read();
for(L=1;L*L<=r&&L<=l;++L)if(ui(l*inv[L])^ui(r*inv[L]))++s[L],--s[L+1];
for(x=l*inv[L],y=r*inv[L];L<=l;L=R+1){
if(x*L>l)--x;if(y*L>r)--y;R=min(ui(l*inv[x]),ui(r*inv[y]));
if(x^y)++s[L],--s[R+1];
}
++s[l+1];--s[r+1];
}
for(i=1;i<=n;++i)write(s[i]+=s[i-1]),putchar(10);
}

2.树状数组

只能说这个数据分类实在是太妙了 Orz

数据分类。

  1. 区间长度不小于 \(d\)

贡献很明显是 \(1\)。

  1. 区间长度小于 \(d\)

我们直接对这些区间进行区间修改,然后直接查询 \(d\) 的倍数,每个区间只可能对答案贡献最多一次。

#include<algorithm>
#include<cstdio>
#include<cctype>
typedef unsigned ui;
const ui M=1e5+5;
ui n,m,s[M],CB[M],id[M*3],l[M*3],r[M*3],d[M*3],BIT[M*3];double inv[M];
inline void write(ui n){
static char s[10];ui top(0);while(s[++top]=n%10^48,n/=10);while(putchar(s[top--]),top);
}
inline ui read(){
ui n(0);char s;while(!isdigit(s=getchar()));while(n=n*10+(s&15),isdigit(s=getchar()));return n;
}
inline void Add(ui x,const ui&val){
while(x<=n)BIT[x]+=val,x+=x&-x;
}
inline ui Query(ui x){
ui ans(0);
while(x>=1)ans+=BIT[x],x^=x&-x;
return ans;
}
signed main(){
ui i,j,ans,now;m=read();n=read();now=m;
for(i=1;i<=m;++i)l[i]=read(),r[i]=read(),++CB[d[i]=r[i]-l[i]+1],id[i]=i;
for(i=n;i>=1;--i)CB[i]+=CB[i+1];for(i=m;i>=1;--i)id[CB[d[i]]--]=i;
for(i=1;i<=n;++i){
while(d[id[now]]<i&&now)Add(l[id[now]],1),Add(r[id[now]]+1,-1),--now;ans=now;
for(j=i;j<=n;j+=i)ans+=Query(j);write(ans);putchar(10);
}
}

成功杀到最优解。

AT2300题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. linux 设置connect 超时

    转载请注明来源:https://www.cnblogs.com/hookjc/ 将一个socket 设置成阻塞模式和非阻塞模式,使用fcntl方法,即: 设置成非阻塞模式: 先用fcntl的F_GET ...

  2. 利用ICMP协议的PING命令获取客户端当前网络质量 by徐文棋

    无论在windows下,linux也好,unix也好,都可以通过 Ping命令获得当前设备的网络延迟,延迟是客户端到服务端的网络响应时间.通常延迟越低,反应速度越快 这里使用了SimplePing   ...

  3. KubeSphere单节点(all-in-one)平台搭建记录

    KubeSphere单节点(all-in-one)平台搭建记录 目录 KubeSphere单节点(all-in-one)平台搭建记录 一.主机准备 1.1 主机配置 1.2 环境准备 二.下载kube ...

  4. 简单RSA攻击方式

    RSA攻击方式总结 1.模数分解 1).解题思路 ​ a).找到RSA算法中的公钥(e,n) ​ b).通过n来找到对应的p和q,然后求得φ(n) ​ c).通过gmpy2.invert或者gmpy2 ...

  5. scrapy爬取youtube游戏模块

    本次使用mac进行爬虫 mac爬虫安装过程中出现诸多问题 避免日后踩坑这里先进行记录 首先要下载xcode ,所以要更新macOS到10.14.xx版本 更新完之后因为等下要进行环境路径配置 但是ma ...

  6. prometheus k8s服务发现

    Prometheus的服务发现在解决什么问题? 被监控的目标(target)是整个监控体系中重要组成部分,传统监控系统zabbix通过 网络发现的机制自动创建主机到zabbix-server,进而快速 ...

  7. 【C#异常处理】堆栈溢出

    栈溢出:死循环.递归调用,C# 的堆栈大小对于 32 位进程只有 1 MB,对于 64 位进程只有 4 MB如下: Main(args); static void Main(string[] args ...

  8. 【C# 线程】Windows系统下常见的7种I/O模型 之Overlapped I/O模型

    overview 这个字符到底是什么含义呢?其实它的意思就是当程序在等待设备操作的时候,可以继续往下做而不必阻塞到那个地方等待设备操作的返回,这就造成了程序运行和设备操作时间上的重叠.  Overla ...

  9. 一张图看懂IaaS, PaaS和SaaS的区别

    转至:https://blog.csdn.net/liujg79/article/details/84453736 编译:老夫子 原文:https://www.bmc.com/blogs/saas-v ...

  10. Linux下搭建iSCSI共享存储

    转至:https://www.linuxidc.com/Linux/2016-09/135655.htm Linux下搭建iSCSI共享存储 拓扑: 实验步骤: ------------------- ...