1 条题解

  • 0
    @ 2025-7-27 18:42:53

    O(max{n,m})O(max\{n,m\}) 差分

    先求出所有操作都执行时, 库存量为 00 的商品的种类数,然后分别求每个操作不执行时贡献的变化。

    如果操作不执行,则可能多的贡献为:原本库存量为 11 的变成 00 了。 那我们可以用商品库存量为 11 的前缀和来计算。

    #include<bits/stdc++.h>
    
    using namespace std;
    typedef long long LL;
    typedef pair<int, int> PII;
    
    #define x first
    #define y second
    
    const int N = 1e3 + 10, mod = 998244353;
    
    
    void solve()
    {
        int n, m;
        cin >> n >> m;
        vector<PII> v(m + 1);
        vector<int> d(n + 1);
        for(int i = 1; i <= m; i ++)
        {
            cin >> v[i].x >> v[i].y;
            d[v[i].x] ++, d[v[i].y + 1] --;
        }
        
        int ans = 0;
        for(int i = 1; i <= n; i ++) 
        {
            d[i] += d[i - 1];
            if(d[i] == 0) ans ++;
        }
        
        for(int i = 1; i <= n; i ++)
        {
            if(d[i] != 1) d[i] = 0;
            d[i] += d[i - 1];
        }
        
        for(int i = 1; i <= m; i ++)
        {
            auto [l, r] = v[i];
            cout << ans + d[r] - d[l - 1] << endl;
        }
    }
    
    int main(){
        int t = 1;
        // cin >> t;
        while(t --)
            solve();
    }
    
    • 1

    信息

    ID
    336
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    15
    已通过
    7
    上传者