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

题意很明确。

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. 消息队列 - mac上安装RabbitMq (转)

    什么是RabbitMQ? RabbitMQ是由Erlang语言编写的实现了高级消息队列协议(AMQP)的开源消息代理软件(也称为面向消息的中间件).支持WIndows.Linux.MAC OS 操作系 ...

  2. Pandas常用操作 - 去重

    1. 使用 drop_duplicates 去重 1.1 初始化数据 df = pd.DataFrame({'stu_name': ['Tom', 'Tony', 'Jack', 'Jack', np ...

  3. 274-基于XC7V690T的3U VPX信号处理板

    一.板卡概述 本板卡系我司自主研发的基于3U VPX导冷架构的信号处理板,适用于高速图像处理,雷达信号处理等.芯片采用工业级设计.该处理板包含1片Xilinx公司的Virtex7系列FPGA-XC7V ...

  4. jenkins发布代码选择不同分支

    jenkins上传代码分支以前都是用变量的方式,手动实现.过程就像这样 构建时候的界面就像下面这样,需要手动输入分支版本. 或者有固定的上线分支,用参数化构建 选项参数 来选择.总之这些方法比较传统, ...

  5. scanf坑我的那些年

    scanf函数作为用户输入指令给计算机的一种输入方法,它的使用有如下几被坑点: scanf用法:#include<stdio.h>;scanf("格式控制符",地址表列 ...

  6. Bypass BeaconEye - Beacon 堆混淆

    这是[信安成长计划]的第 9 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 CS4.5 Sleep_Mask 0x02 HeapEncrypt 0x03 效果 0x04 参考文章 ...

  7. C#异步编程由浅入深(三)细说Awaiter

      上一篇末尾提到了Awaiter这个类型,上一篇说了,能await的对象,必须包含GetAwaiter()方法,不清楚的朋友可以看上篇文章.那么,Awaiter到底有什么特别之处呢?   首先,从上 ...

  8. 提名者周训,misc消失的文件

    下载附件是一个没有后缀的文件,一般这种东西,根据我这个菜狗的经验,直接就是丢进kali的binwalk一顿操作,最后果不其然,是发现了东西的 这里面可以看到一个小细节,就是在binwalk进行分离的时 ...

  9. 单片机中volatile的应用

    01.简述 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使 ...

  10. RFC2544时延测试——信而泰网络测试仪实操

    关键词:RFC2544:时延测试:标记帧:储存转发时延:直通交换时延 时延概述: 时延也常被成为延时(latency),是指一个帧从源点到目的点的总传输时间,包括网络节点的处理时间和在传输介质上的传播 ...