1 条题解

  • 0
    @ 2026-9-24 9:19:32

    P12751

    前言

    建议题目名变成【模板】根号分治。

    思路

    一眼根号分治。

    考虑对于所有 di>nd_i>\sqrt{n},因为总修改点数至多 n\sqrt{n},所以暴力修改;

    对于所有 di≤nd_i\le \sqrt{n},因为 did_i 不同的修改至多 n\sqrt{n},所以对于每一种 did_i 差分修改,前缀和合并时跳着合并。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int t[114514][120],ans[114514];
    main(){
        int n,m,bl=114;
    	cin>>n>>m;
    	for(int i=1,a,l,d;i<=m;i++){
    		cin>>a>>l>>d;
    		if(d>bl)while(l--)ans[a+l*d]++;
    		else t[a][d]++,t[a+l*d][d]--;
    	}
    	for(int d=1;d<=bl;d++){
    		for(int i=d;i<=n;i++)t[i][d]+=t[i-d][d];
            for(int i=1;i<=n;i++)ans[i]+=t[i][d];
        }
    	for(int i=1;i<=n;i++){
            cout<<ans[i]<<" ";
        }
    	return 0;
    }
    
    • 1

    [POI 2017 R2] 集装箱 Shipping containers

    信息

    ID
    6175
    时间
    1000ms
    内存
    228MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者