QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#749393 | #7787. Maximum Rating | yld | WA | 1ms | 3824kb | C++20 | 2.4kb | 2024-11-15 00:13:46 | 2024-11-15 00:13:47 |
Judging History
answer
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define ls rt<<1
#define rs rt<<1|1
using namespace std;
const int MAXN=2e5+5;
struct SegmentTree{
int l,r,sum,num;
}tr[MAXN];
void update(int rt)
{
tr[rt].sum=tr[ls].sum+tr[rs].sum;
tr[rt].num=tr[ls].num+tr[rs].num;
}
void build(int l,int r,int rt)
{
tr[rt].l=l,tr[rt].r=r;
if(l==r) return;
int mid=l+r>>1;
build(l,mid,ls);
build(mid+1,r,rs);
update(rt);
}
void modify(int pos,int rt,int c)
{
if(tr[rt].l==tr[rt].r)
{
tr[rt].sum+=c;
if(c>0) tr[rt].num++;
else tr[rt].num--;
return;
}
int mid=tr[rt].l+tr[rt].r>>1;
if(pos<=mid) modify(pos,ls,c);
else modify(pos,rs,c);
update(rt);
}
int query(int l,int r,int rt,int sum)
{
if(l==r)
{
if(tr[rt].sum>sum) return 0;
else return tr[rt].num;
}
int mid=l+r>>1;
if(tr[rt].sum>=sum) return query(l,mid,ls,sum);
else return tr[ls].num+query(mid+1,r,rs,sum-tr[ls].sum);
}
void solve()
{
int n,q;
cin>>n>>q;
vector<int> a(n+1),X;
vector<pair<int,int>> ask(q+1);
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>0) X.push_back(a[i]);
}
for(int i=1;i<=q;i++)
{
cin>>ask[i].first>>ask[i].second;
if(ask[i].second>0) X.push_back(ask[i].second);
}
sort(X.begin(),X.end());
X.erase(unique(X.begin(),X.end()),X.end());
int len=X.size();
if(len==0) {cout<<1<<endl;return;}
build(1,len,1);
int tot=0;
for(int i=1;i<=n;i++)
{
if(a[i]>0)
{
int pos=lower_bound(X.begin(),X.end(),a[i])-X.begin()+1;
modify(pos,1,a[i]);
}
else tot-=a[i];
}
for(int i=1;i<=q;i++)
{
int now=ask[i].first;
if(a[now]<=0) tot+=a[now];
else
{
int pos=lower_bound(X.begin(),X.end(),a[now])-X.begin()+1;
modify(pos,1,-a[now]);
}
a[now]=ask[i].second;
if(a[now]<=0) tot-=a[now];
else
{
int pos=lower_bound(X.begin(),X.end(),a[now])-X.begin()+1;
modify(pos,1,a[now]);
}
cout<<query(1,len,1,tot)+1<<endl;
}
}
signed main()
{
cin.tie(0)->sync_with_stdio(0);
int t=1;
while(t--) solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3556kb
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: 0
Accepted
time: 0ms
memory: 3528kb
input:
3 5 1 2 3 3 4 2 -2 1 3 3 1 2 1
output:
1 2 1 2 1
result:
ok 5 number(s): "1 2 1 2 1"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3780kb
input:
1 1 1000000000 1 1000000000
output:
1
result:
ok 1 number(s): "1"
Test #4:
score: 0
Accepted
time: 0ms
memory: 3600kb
input:
1 1 -1000000000 1 -1000000000
output:
1
result:
ok 1 number(s): "1"
Test #5:
score: -100
Wrong Answer
time: 1ms
memory: 3824kb
input:
1000 1000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
output:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
result:
wrong answer 1st numbers differ - expected: '946', found: '1'