QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#687842 | #9528. New Energy Vehicle | ir101 | WA | 3ms | 11852kb | C++20 | 2.4kb | 2024-10-29 21:32:46 | 2024-10-29 21:32:50 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define PII pair<int,int>
#define endl '\n'
#define int long long
#define lc p<<1
#define rc p<<1|1
using namespace std;
const int N=1e6+10;
int cnt;
struct node{
int l,r;
ll cnt;
}tr[N<<2];
int pp[N];
void push_up(int p){
tr[p].cnt=tr[lc].cnt+tr[rc].cnt;
}
void build(int p,int l,int r){
tr[p]={l,r,0};
if(l==r){
pp[l]=p;
return;
}
int mid=l+r>>1;
build(lc,l,mid);
build(rc,mid+1,r);
push_up(p);
}
void update(int p,int x,int k){
// cout<<"d"<<endl;
if(tr[p].l==x and tr[p].r==x){
tr[p].cnt+=k;
return;
}
int mid=tr[p].l+tr[p].r>>1;
if(x<=mid){
update(lc,x,k);
}
if(x>mid)update(rc,x,k);
push_up(p);
}
int query(int p,ll syc){
if(tr[p].cnt<syc)return -1ll;
if(tr[p].l==tr[p].r){
return tr[p].l;
}
if(tr[lc].cnt>=syc){
return query(lc,syc);
}
else{
syc-=tr[lc].cnt;
if(tr[rc].cnt>=syc) return query(rc,syc);
return -1ll;
}
}
int L[N],R[N];
vector<int>nxt[N];
ll a[N];
PII b[N];
void solve(){
int n,m;
cin>>n>>m;
// ::srand(time(0));
ll s=0;
for (int i = 1; i <=n ; ++i) {
cin>>a[i];
s+=a[i];
nxt[i].clear();
L[i]=0;
}
build(1,1,m+1);
for (int i = 1; i <=m ; ++i) {
cin>>b[i].first>>b[i].second;
nxt[b[i].second].push_back(i);
}
for (int i = 1; i <=n ; ++i) {
// cout<<nxt[i].size()<<endl;
if(nxt[i].size()){
update(1,nxt[i][0],a[i]);
}
else{
update(1,m+1,a[i]);
}
}
int qs=0;
ll ans=0;
int pos=0;
for (int i = 1; i <=m ; ++i) {
auto [u,v]=b[i];
int p= query(1,u-qs);
if(p==-1)break;
int sum=u-qs;
for (int j = pos; j <p ; ++j) {
sum-=tr[pp[j]].cnt;
update(1,j,-tr[pp[j]].cnt);
}
update(1,p,-sum);
update(1,i,-tr[pp[i]].cnt);
L[v]++;
if(nxt[v].size()<=L[v]){
update(1,m+1,a[v]);
}
else update(1,nxt[v][L[v]],a[v]);
pos=p;
qs=u;
}
ans=qs+tr[1].cnt;
cout<<ans<<endl;
}
signed main(){
ios::sync_with_stdio(false),cin.tie(0);
int t;
cin>>t;
while(t--){
solve();
}
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 3ms
memory: 11852kb
input:
2 3 1 3 3 3 8 1 2 2 5 2 1 2 2 1
output:
9 9
result:
wrong answer 1st lines differ - expected: '12', found: '9'