社区讨论

样例一直输出0求调

P7219[JOISC 2020] 星座 3参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mjbgehi3
此快照首次捕获于
2025/12/18 21:05
2 个月前
此快照最后确认于
2025/12/18 21:07
2 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define endl '\n'
#define debug "-------------------\n"
#define rep(I, A, B) for (int I = (A); I <= (B); I++)
#define dwn(I, A, B) for (int I = (A); I >= (B); I--)
#define int long long
using namespace std;
const int INF = 0x3f3f3f3f3f3f3f3f, mod = 998244353;
int sub(int a, int b){ a -= b; if(a < 0) a += mod; return a;}
int mul(int a, int b){ if(b >= mod) b %= mod; if(a >= mod) a %= mod; a *= b; if(a >= mod) a %= mod; return a;}
void Min(int &a, int b){ if(b < a) a = b;}
void Max(int &a, int b){ if(b > a) a = b;}
template <typename T>
inline void read(T &x) {
    x = 0; char c = getchar();
    int f = 0;
    for (; !isdigit(c); c = getchar()) f |= c == '-';
    for (; isdigit(c); c = getchar()) x = x * 10 + (c ^ 48);
    if (f) x = -x;
}

template <typename T, typename ...Args>
inline void read(T &x, Args &...args) {
    read(x), read(args...);
}
template <typename T>
inline void write(T x, char ch) {
    if (x < 0) x = -x, putchar('-');
    static short st[70], tp;
    do st[++tp] = x % 10, x /= 10; while (x);
    while (tp) putchar(st[tp--] | 48);
    putchar(ch);
}

template <typename T, typename ...Args>
inline void write(T x, char ch, Args ...args) {
    write(x, ch), write(args...);
}

const int N = 2e5 + 5;
int a[N];
struct BIT{
    int n;
    int t[N];
    int lowbit(int i){
		return i & -i;
	}
	void add(int i, int k){
		while(i <= n){
			t[i] += k;
			i += lowbit(i);
		}
	}
	int sum(int i){
		int ans = 0;
		while(i > 0){
			ans += t[i];
			i -= lowbit(i);
		}
		return ans;
	}
}c;
struct DSU{
	int fa[N];
	void init(int n){
		rep(i, 1, n) fa[i] = i;
	} 
	int find(int x){
		return fa[x] == x ? x : fa[x] = find(fa[x]);
	}
}L, R;
vector<pair<int, int> > star[N];
vector<int> del[N];
signed main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
//	ios::sync_with_stdio(0);
//	cin.tie(0);
	int n;
	read(n);
	rep(i, 1, n){
		read(a[i]);
		del[a[i]].push_back(i);
	}
	int m;
	read(m);
	rep(i, 1, m){
		int x, y, c;
		read(x, y, c);
		star[y].push_back({x, c});
	}
	L.init(n + 1);
	R.init(n + 1);
	int ans = 0;
	rep(y, 1, n){
		for(auto it : star[y]){
			int x = it.first, v = it.second, s = c.sum(x);
//			cout << s << " " << v << endl;
			if(s >= v){
				ans += v;
			}else{
				ans += s;
//				cout << y << " " << endl;
//				cout << L.find(x) + 1 << " " << R.find(x) << endl;
				c.add(L.find(x) + 1, v - s);
				c.add(R.find(x), s - v);
//				cout << s << " " << v << endl;
//				rep(i, 1, n){
//					cout << c.t[i] << " ";
//				}
//				cout << endl;
			}
		}
		for(int x : del[y]){
			L.fa[x] = L.fa[x - 1];
			R.fa[x] = R.fa[x + 1];
		}
	}
	write(ans, endl);
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...