哪里要开long long?
  • 板块P2357 守墓人
  • 楼主rainygame
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/3/21 19:03
  • 上次更新2023/10/23 20:55:37
查看原帖
哪里要开long long?
804607
rainygame楼主2023/3/21 19:03

代码如下:

#include<bits/stdc++.h>
using namespace std;
#define MAXN 200001

int n, f, opt, l, r;
int a[MAXN];
long long k;
long long c1[MAXN], c2[MAXN];

int lowbit(int x){
    return x & -x;
}

void add(int i, long long k){
    int x = i-1;
    while(i <= n){
        c1[i] += k;
        c2[i] += x*k;
        i += lowbit(i);
    }
}

void add(int l, int r, long long k){
	add(l, k);
	add(r+1, -k);
}

long long get_sum(int i){
    long long ans = 0;
    int x = i;
    while (i){
        ans += x*c1[i] - c2[i];
        i -= lowbit(i);
    }
    return ans;
}

long long query(int l, int r){
	return get_sum(r) - get_sum(l-1);
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
    cin >> n >> f;
    for (int i=1; i<=n; i++){
        cin >> a[i];
        add(i, a[i]-a[i-1]);
    }
    
    while (f--){
    	cin >> opt;
    	switch (opt){
    		case 1:
    			cin >> l >> r >> k;
            	add(l, r, k);
            	break;
            case 2:
            	cin >> k;
        		add(1, 1, k);
        		break;
        	case 3:
        		cin >> k;
        		add(1, 1, -k);
        		break;
        	case 4:
        		cin >> l >> r;
            	cout << query(l, r) << '\n';
            	break;
            case 5:
            	cout << query(1, 1) << '\n';
            	break;
		}
    } 
    return 0;
} 

加上:

#define int long long

后即可AC。

但是我不知道为什么这个不可以AC,我认为所有需要开 long long 的地方都已经开了,还有哪些地方要开 long long 吗?

2023/3/21 19:03
加载中...