萌新刚学c++求助(玄关2个
  • 板块灌水区
  • 楼主zyc_bot
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/2/22 20:29
  • 上次更新2024/2/22 21:41:25
查看原帖
萌新刚学c++求助(玄关2个
1076445
zyc_bot楼主2024/2/22 20:29

rt,刚学分块,代码样例都没过,求助

题目

代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>

using namespace std;

const int N = 1e5 + 1, L = 1e3 + 1;

int n, m;
int num, a[N];
int blong[L], add[L];

int main()
{
    cin >> n >> m;
    for (int i = 1; i <= n; i ++ ) cin >> a[i];
    num = sqrt(n);
    for (int i = 1; i <= n; i ++ ) blong[i] = ceil(float(i) / num);
    
    char op;
    int l, r, d;
    
    while (m -- )
    {
        cin >> op;
        
        if (op == 'C')
        {
            cin >> l >> r >> d;
            if (blong[l] == blong[r])
            {
                for (int i = l; i <= r; i ++ )
                  a[i] += d;
            }
            else
            {
                for (int i = l; i <= num * blong[l]; i ++ ) a[i] += d;
                for (int i = blong[l] + 1; i < blong[r]; i ++ ) add[i] += d;
                for (int i = (blong[r] - 1) * num + 1; i <= r; i ++ ) a[i] += d;
            }
        }
        else
        {
            int sum = 0;
            cin >> l >> r;
            for (int i = l; i <= num * blong[l]; i ++ ) sum += a[i];
            for (int i = blong[l] + 1; i < blong[r]; i ++ ) sum += (a[i] + add[i]);
            for (int i = (blong[r] - 1) * num - 1; i <= r; i ++ ) sum += a[i];
            cout << sum << endl;
        }
        
    }
    
    return 0;
     
}
2024/2/22 20:29
加载中...