2 条题解

  • 3
    @ 2024-2-13 21:52:37
    #include <bits/stdc++.h> 
    using namespace std;
    #define ll long long
    ll n,m,a[100001],l,r,q,b[100001];
    int main(){
        ios::sync_with_stdio(0);
        cin>>n>>m;
        for(ll i=1;i<=n;i++){
            cin>>a[i];
            b[i]=a[i]-a[i-1];
        }
        for(ll i=1;i<=m;i++){
            cin>>l>>r>>q;
            b[l]+=q;
            b[r+1]-=q;
        }
        for(ll i=1;i<=n;i++){
            a[i]=a[i-1]+b[i];
            cout<<a[i]<<" ";
        }
        return 0;
    }
    
    • -3
      @ 2022-8-5 21:08:42

      本题是一题较简单的基础差分模板题。 不会的人可以看看这个直播:https://www.bilibili.com/video/BV1MN4y1j7dR?spm_id_from=333.999.0.0&vd_source=3136e9894179057b25e6f1820e1738da


      具体代码如下:

      #include <bits/stdc++.h>
      using namespace std;
      int n, k, l, r, p, water[100005], diff[100005];
      int main()
      {
          cin >> n >> k;
          for (int i = 1; i <= n; i++)
          {
              // 差分算法:输入
              cin >> water[i];
              diff[i] = water[i] - water[i - 1];
          }
          for (int i = 1; i <= k; i++)
          {
              cin >> l >> r >> p;
              // 差分算法:降低时间复杂度
              diff[l] += p;
              diff[r + 1] -= p;
          }
          for (int i = 1; i <= n; i++)
          {
              diff[i] += diff[i - 1];
          }
          for (int i = 1; i <= n; i++)
          {
              // 输出
              cout << diff[i] << " ";
          }
          return 0;
      }
      
      • 1

      信息

      ID
      1058
      时间
      1000ms
      内存
      128MiB
      难度
      2
      标签
      递交数
      106
      已通过
      62
      上传者