删掉mod就AC,不删就WA
  • 板块学术版
  • 楼主小超手123
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/9/26 21:15
  • 上次更新2023/11/2 17:57:40
查看原帖
删掉mod就AC,不删就WA
490978
小超手123楼主2023/9/26 21:15

mod不是只会影响常数吗,为什么还会影响答案。具体我写在注释里的,麻烦大佬看看。

#include<bits/stdc++.h>
#define N 4000005
#define int long long
#define mod 1000000007
using namespace std;
int n, k, ans;
vector<int>p[N];
int c1[N * 4], c2[N * 4];
int tag[N * 4];
void maketag(int u, int L, int R, int x) {
	c2[u] += x * x  * (R - L + 1) + 2 * c1[u] * x ;
	c1[u] += x * (R - L + 1) % mod;
	tag[u] += x;
}
void pushdown(int u, int L, int R) {
	int mid = (L + R) / 2;
	maketag(u * 2, L, mid, tag[u]);
	maketag(u * 2 + 1, mid + 1, R, tag[u]);
	tag[u] = 0;
}
void pushup(int u) {
	//c1[u] = (c1[u * 2] + c1[u * 2 + 1]) % mod;
	//c2[u] = (c2[u * 2] + c2[u * 2 + 1]) % mod; 
	//删掉mod就AC,不删就WA 
	c1[u] = c1[u * 2] + c1[u * 2 + 1];
	c2[u] = c2[u * 2] + c2[u * 2 + 1];
}
void update(int u, int L, int R, int l, int r, int x) {
	if(l <= L && R <= r) {
		maketag(u, L, R, x);
		return;
	}
	if(r < L || R < l) return;
	int mid = (L + R) / 2;
	pushdown(u, L, R);
	update(u * 2, L, mid, l, r, x);
	update(u * 2 + 1, mid + 1, R, l, r, x);
	pushup(u);
}
int query(int u, int L, int R, int l, int r) {
	if(l <= L && R <= r) return c2[u];
    if(r < L || R < l) return 0;
    int mid = (L + R) / 2;
    pushdown(u, L, R);
    return query(u * 2, L, mid, l, r) + query(u * 2 + 1, mid + 1, R, l, r);
}
signed main() {
	cin >> n >> k;
	if(k == 1) {
		for(int i = 1; i <= n; i++) 
			ans = (ans + i * (n - i + 1) % mod) % mod; 
		for(int i = 1; i <= n - 1; i++) {
			int u, v;
			cin >> u >> v;
			if(u > v) swap(u, v);
			ans = (ans - u * (n - v + 1) % mod + mod) % mod; 
		}
		cout << ans;
	} 
	else {
		for(int i = 1; i <= n - 1; i++) {
			int u, v;
			cin >> u >> v;
			p[max(u, v)].push_back(min(u, v));
		}
		for(int r = 1; r <= n; r++) {
			update(1, 1, n, 1, r, 1);
			for(int i = 0; i < p[r].size(); i++) {
				int j = p[r][i];
				update(1, 1, n, 1, j, -1);
			}
			ans = (ans + query(1, 1, n, 1, r)) % mod;
		}
		cout << ans << endl;
	}
	return 0;
} 
2023/9/26 21:15
加载中...