首先要知道 (m/1 + m/2 + ... + m/m) 约为 mlogm

还有一个比较明显的结论,如果一个纪念品区间长度大于d,那么如果列车的停车间隔小于等于d,则这个纪念品一定能被买到

然后把区间按长度排序

枚举d,边枚举边加那些长度小于d的区间到线段树当中,这样可以保证一个纪念品不会被加2次

最后输出答案即可

#include <iostream>
#include <algorithm>
using namespace std;
const int Maxn = *;
namespace seqtree
{
struct Tree
{
Tree *ch[];
long long _v, label;
int Num, _l, _r, mid;
Tree() { _v = label = ; Num = ; }
void update();
void maintain();
}Node[Maxn], *null, *Root;
int tot = , _k, _L, _R;
long long v;
void Tree::update()
{
if(!label) return;
_v += Num*label;
if(Num != ) ch[]->label += label, ch[]->label += label;
label = ;
}
void Tree::maintain()
{
ch[]->update(); ch[]->update();
_v = ch[]->_v + ch[]->_v;
}
void protect()
{
null = new Tree();
null->ch[] = null->ch[] = null; null->Num = ;
}
void insert(Tree *&o, int l, int r)
{
int mid = (l+r)/;
if(o == null)
{
o = &Node[tot++];
o->ch[] = o->ch[] = null;
o->_l = l; o->_r = r; o->mid = (l+r)/;
}
if(l == r) { o->_v = v; return; }
if(_k <= mid) insert(o->ch[], l, mid);
else insert(o->ch[], mid+, r);
o->maintain(); o->Num = o->ch[]->Num + o->ch[]->Num;
}
Tree* Build(int n, long long *a)
{
protect(); Root = null;
for(int i = ; i <= n; i++) _k = i, v = a[i], insert(Root, , n);
return Root;
}
long long query(Tree *o)
{
long long ans = ;
o->update();
if(_L <= o->_l && o->_r <= _R) return o->_v;
if(_L <= o->mid) ans += query(o->ch[]);
if(_R > o->mid) ans += query(o->ch[]);
return ans;
}
long long Query(int L, int R) { _L = L; _R = R; return query(Root); }
void change(Tree *o)
{
o->update();
if(_L <= o->_l && o->_r <= _R) { o->label += v; o->update(); return; }
if(_L <= o->mid) change(o->ch[]); if(_R > o->mid) change(o->ch[]);
o->maintain();
}
void Change(int L, int R, int V) { _L = L; _R = R; v = V; change(Root); }
};
using namespace seqtree; struct Data
{
int l, r, v;
bool operator < (const Data &B) const
{ return v < B.v; }
}A[Maxn]; int n, m, l, r;
long long a[Maxn], ANS[Maxn];
int main()
{
cin.sync_with_stdio(false);
cin>>n>>m;
Build(m+, a);
for(int i = ; i < n; i++)
{
cin>>A[i].l>>A[i].r;
A[i].v = A[i].r - A[i].l + ;
}
sort(A, A+n);
int k = ;
for(int i = ; i <= m; i++)
{
for(; A[k].v < i && k < n; k++) Change(A[k].l, A[k].r, );
int ans = n - k;
for(int j = i; j <= m; j += i) ans += Query(j, j);
cout<<ans<<endl;
}
}

arc068 E: Snuke Line的更多相关文章

  1. ARC068E - Snuke Line

    原题链接 题意简述 给出个区间和.求对于任意,有多少个区间包含的倍数. 题解 考虑怎样的区间不包含的倍数. 对于的倍数和,满足的区间不包含任何的倍数. 于是转化为二维数点问题,可以用可持久化线段树解决 ...

  2. AtCoder Regular Contest 068E:Snuke Line

    题目传送门:https://arc068.contest.atcoder.jp/tasks/arc068_c 题目翻译 直线上有\(0-m\)这\(m+1\)个点,一共有\(m\)辆火车.第\(i\) ...

  3. 【AtCoder - 2300】Snuke Line(树状数组)

    BUPT2017 wintertraining(15) #9A 题意 有n个纪念品,购买区间是\([l_i,r_i]\).求每i(1-m)站停一次,可以买到多少纪念品. 题解 每隔d站停一次的列车,一 ...

  4. 【arc068E】Snuke Line

    Portal -->arc068E (温馨提示:那啥..因为各种奇怪的我也不知道的原因这题的题号在某度上面显示出来是agc007F...然而下面是arc068E的题解qwq给大家带来不便之处真是 ...

  5. [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$ 题解 ...

  6. 【AtCoder】ARC068

    ARC 068 C - X: Yet Another Die Game 显然最多的就是一次6一次5 最后剩下的可能需要多用一次6或者6和5都用上 #include <bits/stdc++.h& ...

  7. AtCoder Regular Contest

    一句话题解 因为上篇AGC的写的有点长……估计这篇也短不了所以放个一句话题解方便查阅啥的吧QwQ 具体的题意代码题解还是往下翻…… ARC 058 D:简单容斥计数. E:用二进制表示放的数字,然后状 ...

  8. NOIp模拟赛三十

    心态崩了的一天 先Orz yrx 开场五分钟yrx大吼一声:“这B题不是原题吗” hjw:“对哦好像我也做过哦” 过了十分钟yrx又大吼一声:“这C题我也做过啊,洪水那题啊” 于是 像我这种傻逼A题一 ...

  9. Snuke's Subway Trip

    すぬけ君の地下鉄旅行 / Snuke's Subway Trip Time limit : 3sec / Memory limit : 256MB Score : 600 points Problem ...

随机推荐

  1. (转)Dubbo 简单Dome搭建

    (转)原地址https://blog.csdn.net/noaman_wgs/article/details/70214612/ Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统 ...

  2. lvs集群实现lvs-dr模型和lvs-nat模型

    ipvsadm ipvsadm命令是lvs集群在应用层的管理工具,我们可以通过此ipvsadm来管理lvs的配置,其实现了集群服务管理:增.删.改,集群服务的RS管理:增.删.改以及查看集群状态. 管 ...

  3. dom技术解析xml (php)

    1.xml实例 test.xml <?xml version="1.0" encoding="utf-8"?><!DOCTYPE 班级 SYS ...

  4. php-语言参考-类型3.2-未完待续

    一,PHP变量的8个类型 四种标量类型: boolean (布尔型) integer (整型) float (浮点型, 也称作 double) string (字符串) 两种复合类型: array ( ...

  5. Mysql基础2-数据定义语言DDL

    主要: 数据库操作语句 数据表操作语句 视图定义语句 数据库表设计原则 DDL: Data Definition Language 数据定义语言 数据库操作语句 创建库 创建数据库: create d ...

  6. vi/vim连续注释

    知识点: 1-可视块模式方法 2-替换方法 3-自定义快捷键方式 今天刚好重新在linux上手工搭建完Lamp环境,用来下vi操作,一段时间不用就有些生疏了,正好经常要注释,回顾下自己会的方法,小结一 ...

  7. Oracle数据库之 PL SQL 学习笔记

    1.定义基本变量: 2.引用型的变量: set serveroutput on   declare pename emp.ename%type; psal emp.sal%type;   begin ...

  8. scrapy框架爬取笔趣阁

    笔趣阁是很好爬的网站了,这里简单爬取了全部小说链接和每本的全部章节链接,还想爬取章节内容在biquge.py里在加一个爬取循环,在pipelines.py添加保存函数即可 1 创建一个scrapy项目 ...

  9. python基础小知识,is和==的区别,编码和解码

    1.is和==的区别 1)id() 通过id()我们可以查看到一个变量表示的值在内存中的地址 >>> s1 = "Tanxu" >>> s2 = ...

  10. python爬取豌豆荚中的详细信息并存储到SQL Server中

    买了本书<精通Python网络爬虫>,看完了第6章,我感觉我好像可以干点什么:学的不多,其中的笔记我放到了GitHub上:https://github.com/NSGUF/PythonLe ...