QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#696773#9528. New Energy VehicleSocialPandaWA 1ms3956kbC++232.7kb2024-11-01 01:17:082024-11-01 01:17:09

Judging History

This is the latest submission verdict.

  • [2024-11-01 01:17:09]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 3956kb
  • [2024-11-01 01:17:08]
  • Submitted

answer

#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>
//#define int long long
//#define LL long long
#define double long double
//#define lf Lf
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define endl "\n"
#define PII pair<int,int>
#define Gheap priority_queue<int,vector<int>,greater<int>>
#define Lheap priority_queue<int>
#define MAXN 0x3f3f3f3f
#define MINN -0x3f3f3f3f
using namespace std;
const int N=1e5+100,M=2*N;
//int e[N],w[M],h[M],ne[M],idx;

int tree[N];
int nnn;

int lowbit(int num)
{
	return num&-num;
}
void add(int psi,int ice)
{
	for(int i=psi;i<=nnn;i+=lowbit(i)) tree[i]+=ice;
}
int sum(int psi)
{
	int res=0;
	for(int i=psi;i;i-=lowbit(i)) res+=tree[i];
	return res;
}
int getval(int psi)
{
	return sum(psi)-sum(psi-1);
}

void solve()
{
    int n,m;
    cin>>n>>m;
    nnn=n;

    memset(tree,0,sizeof tree);
    int a[n+10];
    int v[n+10];
    PII c[m+10];

    for(int i=1;i<=n;i++) 
    {
    	cin>>a[i];
    	v[i]=a[i];
    	add(i,a[i]);
    }
    for(int i=1;i<=m;i++) cin>>c[i].fi>>c[i].se;

    unordered_map<int,int> mp;
	vector<int> q(m+10);
	int ll=0,rr=-1;

	for(int i=1;i<=m;i++)
	{
		mp[c[i].se]++;
	}

	int cur = 0;
	int hou = 0;
	for(int i=1;i<=n;i++)
	{
		if(mp[i]==0)
		{
			hou+=a[i];
			a[i]=0;
		}
	}

	for(int i=1;i<=m;i++)
	{
		int psi = c[i].fi;
		int sn = c[i].se;

		int need_go = psi - cur;
		int _need_go = need_go;


		int L=i,R=m;

		while(L<R)
		{
			int mid = L+R>>1;

			int can_go = sum(mid)-sum(cur);
			if(can_go > need_go) L=mid+1;
			else R=mid;
		}

		need_go -= (sum(L-1)-sum(cur));
		for(int j=i;j<=L-1;j++)
		{
			add(c[j].se,0-getval(j));
			a[c[j].se]=0;
		}
		int len = min(need_go,getval(L));
		need_go-=len;
		a[c[L].se]-=len;
		add(c[L].se,a[c[L].se]-getval(L));

//cout<<"debug:"<<getval(L)<<endl;
		if(need_go>0)
		{
			int can_go = min(need_go,hou);
			hou-=can_go;
			need_go-=can_go;
		}

		if(need_go>0)
		{//中途走不动了
			cout<<cur+(_need_go - need_go)<<endl;
			return;
		}

		mp[sn]--;
		if(mp[sn]==0)
		{
			hou+=v[sn];
			int diff = v[sn]-getval(sn);
			add(sn,diff);
			a[sn]=0;
		}
		else
		{
			int diff = v[sn]-getval(sn);
			add(sn,diff);
			a[sn]=v[sn];
		}
		cur = psi;
	}

	int ans = c[m].fi;
	for(int i=1;i<=n;i++) ans+=a[i];
	cout<<ans+hou<<endl;

}
/*
1 2 3
3 3 3

0 1 2 3 4 5 6 7 8 9 10 11 12
          1 1 1


1 2
5 2

0 1 2 3 4 5 6 7 8 9
  2 1

*/
int main()
{
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int tt=1;
    cin >> tt;
    while(tt--) solve();
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 3956kb

input:

2
3 1
3 3 3
8 1
2 2
5 2
1 2
2 1

output:

12
9

result:

ok 2 lines

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 3944kb

input:

6
3 2
2 2 2
6 1
7 1
2 2
3 3
2 1
6 2
2 3
2 2
5 1
7 2
9 1
2 2
3 3
2 1
6 2
1 1
999999999
1000000000 1
1 1
1000000000
1000000000 1

output:

9
5
2
5
999999999
2000000000

result:

wrong answer 2nd lines differ - expected: '11', found: '5'