ARC068C - Snuke Line

Description

其实就是给出nnn个区间[li,ri][l_i,r_i][li​,ri​]对于每一个i∈[1,M]i\in[1,M]i∈[1,M],求:
∑j=1n[⌊rji⌋−⌊lj−1i⌋≥1]\sum_{j=1}^n[\lfloor \frac{r_j}{i}\rfloor-\lfloor \frac{l_j-1}{i}\rfloor\geq 1]j=1∑n​[⌊irj​​⌋−⌊ilj​−1​⌋≥1]
好吧其实这样思考感觉更难了。。。

Solution

考虑计算这个的瓶颈,我们自然地想到用调和级数级别的方法去计算这类问题:对于每个位置ttt,求出st=∑jt∈[lj,rj]s_t=\sum_j{t\in[l_j,r_j]}st​=∑j​t∈[lj​,rj​],也就是ttt被包含的区间个数(这可以用树状数组维护),然后直接枚举iii的倍数计算答案。但这样会有问题,原因在于一个区间可能存在多个iii的倍数,产生重复贡献。

进一步的,我们发现当rj−lj+1>=ir_j-l_j+1>=irj​−lj​+1>=i时,必然为111,否则必然不大于111,有了这个性质,我们就可以只对长度小于iii的区间统计sis_isi​,枚举iii的倍数计算,剩下的区间都会产生111的贡献,直接统计即可。

时间复杂度O(nlnMlgM+nlgn)O(n\;lnM\;lgM+nlgn)O(nlnMlgM+nlgn)。

Code

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <cassert>
#include <string.h>
//#include <unordered_set>
//#include <unordered_map>
//#include <bits/stdc++.h>#define MP(A,B) make_pair(A,B)
#define PB(A) push_back(A)
#define SIZE(A) ((int)A.size())
#define LEN(A) ((int)A.length())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define fi first
#define se secondusing namespace std;template<typename T>inline bool upmin(T &x,T y) { return y<x?x=y,1:0; }
template<typename T>inline bool upmax(T &x,T y) { return x<y?x=y,1:0; }typedef long long ll;
typedef unsigned long long ull;
typedef long double lod;
typedef pair<int,int> PR;
typedef vector<int> VI;const lod eps=1e-11;
const lod pi=acos(-1);
const int oo=1<<30;
const ll loo=1ll<<62;
const int mods=998244353;
const int MAXN=300005;
const int INF=0x3f3f3f3f;//1061109567
/*--------------------------------------------------------------------*/
inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}
PR a[MAXN];
int s[MAXN],n,m;
void add(int x,int y) { for (;x<=m+1;x+=x&(-x)) s[x]+=y; }
int query(int x) { int ans=0; for (;x;x-=x&(-x)) ans+=s[x]; return ans; }
signed main()
{n=read(),m=read();for (int i=1;i<=n;i++) a[i].fi=read(),a[i].se=read();sort(a+1,a+n+1,[&](PR x,PR y){ return x.se-x.fi<y.se-y.fi; });for (int i=1,nw=1;i<=m;i++){while (nw<=n&&a[nw].se-a[nw].fi+1<i) add(a[nw].fi,1),add(a[nw].se+1,-1),nw++;int ans=n-nw+1;for (int j=i;j<=m;j+=i) ans+=query(j);printf("%d\n",ans);}return 0;
}

ARC068C - Snuke Line相关推荐

  1. AT2300-[ARC068C]Snuke Line【整除分块】

    正题 题目链接: https://www.luogu.com.cn/problem/AT2300 https://atcoder.jp/contests/arc068/tasks/arc068_c 题 ...

  2. すぬけ君の地下鉄旅行 / Snuke's Subway Trip(AtCoder-2069)

    Problem Description Snuke's town has a subway system, consisting of N stations and M railway lines. ...

  3. すぬけ君の塗り絵 / Snuke's Coloring(AtCoder-2068)

    Problem Description We have a grid with H rows and W columns. At first, all cells were painted white ...

  4. 【AtCoder 2069】Snuke's Subway Trip(构图方法)

    题目链接:[AtCoder 2069]Snuke's Subway Trip 题目大意:有 n n n个节点,m" role="presentation" style=& ...

  5. AtCoder 2068 すぬけ君の塗り絵 / Snuke's Coloring

    AtCoder 2068 すぬけ君の塗り絵 / Snuke's Coloring Problem Statement We have a grid with H rows and W columns. ...

  6. SyntaxError: Non-ASCII character ‘\xe5‘ in file(xxlrt_1.py) on line 7, but no encoding declared;

    具体报错如下: SyntaxError: Non-ASCII character '\xe5' in file /home/hly/work/python/work/xlrt_1.py on line ...

  7. Binary XML file line #8: Error inflating class android.support.v7.widget.RecyclerView

    今天创建了一个 demo ,然后就是复制RecyclerView 过去, 到最后完成运行的时候发现 系统奔溃了, 然后 提示 Binary XML file line #8: Error inflat ...

  8. Android运行时候报错:android.view.InflateException: Binary XML file line #19: Binary XML file lin

    Android运行时候报错:android.view.InflateException: Binary XML file line #19: Binary XML file lin 这个问题自己大致在 ...

  9. android.view.InflateException: Binary XML file line #7: Binary XML file line #7

    错误如下 11-21 08:19:44.040 3608-3608/com.leon.oldrecyclerview E/AndroidRuntime: FATAL EXCEPTION: main   ...

最新文章

  1. 多进程和多线程的概念
  2. VScode配置prettier和eslint
  3. Flex不支持SOAP1.2
  4. OpenCV ChArUco角的检测
  5. 一加7充电_刘作虎:一加7没有无线充电,Dash是最好的快充之一
  6. Debian 7 Wheezy 安装 VirtualBox
  7. 真假签到题(签到+打表)
  8. 二十一天学通VC++之创建工作者线程
  9. 施耐德 m340 编程手册_PLC模拟量的通用转换原理以及编程方法
  10. 工商银行区块链专利 为提高证书发放的效率
  11. 一道智商测试题 月薪三万
  12. IOS 获取农历节日 节气
  13. write和fwrite
  14. Visio 32位下载
  15. 抖音音乐号变现能力强不强,超详细运营攻略教程丨国仁网络
  16. 音频处理 windows10下python三方库librosa安装
  17. CSS,给你点“颜色“看看
  18. 易语言超级列表框表项关键字搜索代码示例_易语言
  19. xbee模块和单片机_基于XBee进行ZigBee组网
  20. 制造业SaaS多供应链系统:实现全场景数字化,赋能制造企业降本增效

热门文章

  1. 世界上最震撼的地质景观,你认识多少?
  2. 和哪个专业的男生谈恋爱最惨?
  3. 盘点那些让程序员目瞪口呆的Bug都有什么?
  4. a 寻路算法 java_A*(也叫A star, A星)寻路算法Java版 | 学步园
  5. java 日期 区间_如何实现时间区间的分割??
  6. android byte[] 转string 好多问号_#WIPI# Android使用HID设备
  7. 在c语言中如何屏蔽一段程序,如何在用C语言关闭TCP程序中的Nagle算法
  8. Linux网络模块全局变量,()不是Linux系统的特色.
  9. leetcode62. 不同路径
  10. 7-41 PAT排名汇总 (25 分)(详解+思路+重写sort函数)兄弟们冲呀呀呀呀呀呀呀