• 【AT2300】Snuke Line


    题目

    题目链接:https://atcoder.jp/contests/ARC068/tasks/arc068_c
    有一趟列车有 \(M+1\) 个车站,从 \(0\)\(M\) 编号。有 \(N\) 种商品,第 \(i\) 种只在编号 \([li,ri]\) 的车站出售。一辆列车有一个预设好的系数 \(d\),从 \(0\) 出发,只会在 \(d\) 的倍数车站停车。对于 \(d\)\(1\)\(M\) 的列车,求最多能买到多少种商品。

    思路

    考虑每一个商品能对哪些车造成贡献。一个车 \(d\) 可以被区间 \([l_i,r_i]\) 贡献到当且仅当 \(\frac{l_i}{d}<\frac{r_1}{d}\)
    \(l_i\) 整除分块,对于每一个商计算对 \(d\) 的贡献即可。
    时间复杂度 \(O(n\sqrt{m})\)

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N=300010;
    int n,m,i,ql,qr,ans[N];
    
    int read()
    {
    	int d=0; char ch=getchar();
    	while (!isdigit(ch)) ch=getchar();
    	while (isdigit(ch)) d=(d<<3)+(d<<1)+ch-48,ch=getchar();
    	return d;
    }
    
    int main()
    {
    	m=read(); n=read();
    	while (m--)
    	{
    		ql=read()-1; qr=read();
    		for (i=1;i<=ql;)
    		{
    			int d=qr/i,j=qr/d,k=ql/d;
    			ans[max(k+1,i)]++; ans[j+1]--;
    			i=j+1;
    		}
    		ans[i]++; ans[qr+1]--;
    	}
    	for (int i=1;i<=n;i++)
    	{
    		ans[i]+=ans[i-1];
    		printf("%d\n",ans[i]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    CalParcess.php.
    MyCalView.php
    接口
    抽象类
    方法重载(重写)/方法覆盖、魔术函数实现
    继承覆盖问题
    推荐算法之基于内容的推荐
    推荐算法之协同过滤
    reactor模式:主从式reactor
    reactor模式:多线程的reactor模式
  • 原文地址:https://www.cnblogs.com/stoorz/p/13720928.html
Copyright © 2020-2023  润新知