社区讨论
样例一直输出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 条回复,欢迎继续交流。
正在加载回复...