1 solutions

  • 1
    @ 2026-10-10 22:14:33

    这个数列每个数的相对大小不变,排序后只需二分

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int NR=500002;
    int a[NR];
    long long s[NR];
    int main()
    {
    	int n,m,i;
    	long long ad=0;
    	cin>>n>>m;
    	for(i=1;i<=n;i++) cin>>a[i];
    	sort(a+1,a+n+1);
    	for(i=n;i>=1;i--) s[i]=s[i+1]+a[i];
    	while(m--)
    	{
    		int op;
    		cin>>op;
    		if(op==1)
    		{
    			int k;
    			cin>>k;
    			ad+=k;
    		}
    		else
    		{
    			int p=lower_bound(a+1,a+n+1,-ad)-a;
    			cout<<s[p]+ad*(n-p+1)<<endl;
    		}
    	}
    	return 0;
    } 
    
    • 1

    Information

    ID
    8637
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    3
    Tags
    # Submissions
    2
    Accepted
    1
    Uploaded By