QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#785590 | #7787. Maximum Rating | Nanani# | WA | 1ms | 7736kb | C++17 | 1.8kb | 2024-11-26 18:24:59 | 2024-11-26 18:25:09 |
Judging History
answer
#include<bits/stdc++.h>
#define F(i, a, b) for(int i = a; i <= b; i ++)
#define int long long
using namespace std;
const int N = 4e5 + 10;
int n, m, a[N], idx = 0, rt = 0, ls[N << 5], rs[N << 5];
int f1[N << 5], f2[N << 5];
const int mx = 1e9;
void push_up(int rt) {
f1[rt] = f1[ls[rt]] + f1[rs[rt]];
f2[rt] = f2[ls[rt]] + f2[rs[rt]];
}
void update(int &rt, int l, int r, int x, int w) {
if(! rt) rt = ++ idx;
if(l == r) {
f1[rt] += w, f2[rt] += w * x;
return;
}
int mid = l + r >> 1;
if(mid >= x) update(ls[rt], l, mid, x, w);
else update(rs[rt], mid + 1, r, x, w);
push_up(rt);
}
int query(int rt, int l, int r, int k) {
if(! rt) return 0;
if(l == r) {
return k / l + 1;
}
int mid = l + r >> 1;
if(f2[ls[rt]] > k) return query(ls[rt], l, mid, k);
else return f1[ls[rt]] + query(rs[rt], mid + 1, r, k - f2[ls[rt]]);
}
void sol() {
cin >> n >> m;
F(i, 1, n) cin >> a[i];
int cnt = 0, sum = 0;
F(i, 1, n) {
if(a[i] <= 0) sum += a[i];
else cnt ++, update(rt, 1, mx, a[i], 1);
}
F(i, 1, m) {
int x, v; cin >> x >> v;
if(a[x] <= 0) sum -= a[x];
else cnt --, update(rt, 1, mx, a[i], -1);
a[x] = v;
if(a[x] <= 0) sum += a[x];
else cnt ++, update(rt, 1, mx, a[i], 1);
int now = -1;
if(f2[rt] > -sum) {
now = query(rt, 1, mx, -sum);
}
int qaq = now == -1 ? 0 : cnt - now + 1;
// cout << cnt - now + 1 << " " << cnt << "??\n";
cout << cnt - qaq + 1 << "\n";
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
int t = 1;
// cin >> t;
F(i, 1, t) sol();
return 0;
}
/*
3 5
1 2 3
3 4
2 -2
1 -3
3 1
2 1
*/
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 7732kb
input:
3 5 1 2 3 3 4 2 -2 1 -3 3 1 2 1
output:
1 2 2 2 3
result:
ok 5 number(s): "1 2 2 2 3"
Test #2:
score: -100
Wrong Answer
time: 1ms
memory: 7736kb
input:
3 5 1 2 3 3 4 2 -2 1 3 3 1 2 1
output:
1 2 2 2 1
result:
wrong answer 3rd numbers differ - expected: '1', found: '2'