Submission #72401121


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define int long long

const int N = 2e5 + 5;
int a[N],b[N];
long long sum_1,sum_2,cnt_2,best;
multiset<int> set_1,set_2,yes,no;

void balance()
{
	while(yes.size() > cnt_2) 
	{
		best -= *yes.begin();
		no.insert(*yes.begin());
		yes.erase(yes.begin());
	}
	while(!no.empty() && yes.size() < cnt_2)
	{
	    best += *no.rbegin();
	    yes.insert(*no.rbegin());
	    no.erase(--no.end());
	}
}

void insert(int p)
{
    if(b[p] == 1)
    {
        set_1.insert(a[p]);
        sum_1 += a[p];
    }
    else
    {
        set_2.insert(a[p]);
        cnt_2++;
        sum_2 += a[p];
    }
    if(no.empty() || a[p] > (*no.rbegin()))
    {
        yes.insert(a[p]);
        best += a[p];
    }
    else
    {
        no.insert(a[p]);
    }
    balance();
}

void erase(int p)
{
    if(b[p] == 1)
    {
        set_1.erase(set_1.find(a[p]));
        sum_1 -= a[p];
    }
    else
    {
        set_2.erase(set_2.find(a[p]));
        cnt_2--;
        sum_2 -= a[p];
    }
    if(no.empty() || a[p] > (*no.rbegin()))
    {
        yes.erase(yes.find(a[p]));
        best -= a[p];
    }
    else
    {
        no.erase(no.find(a[p]));
    }
    balance();
}

long long calc()
{
    if(set_2.empty())
    {
        return sum_1;
    }
    else if(set_1.empty())
    {
        return ((sum_2 - *set_2.begin()) << 1) + *set_2.begin();
    }
    else if(*set_1.rbegin() < *set_2.begin())
    {
        return ((sum_2 - *set_2.begin() + *set_1.rbegin()) << 1) + sum_1 - *set_1.rbegin() + *set_2.begin();
    }
    else
    {
        return (best << 1) + sum_2 + sum_1 - best;
    }
}

signed main()
{
	int n,q;
	scanf("%lld %lld",&n,&q);
	for(int i = 1;i <= n;i++)
	{
	    scanf("%lld %lld",&a[i],&b[i]);
	    insert(i);
	}
	while(q--)
	{
	    int p,x,y;
	    scanf("%lld %lld %lld", &p, &x, &y);
	    erase(p);
	    a[p] = x;
	    b[p] = y;
	    insert(p);
	    printf("%lld\n",calc());
	}
	return 0;
}

Submission Info

Submission Time
Task F - Egoism
User rgr2025
Language C++23 (GCC 15.2.0)
Score 550
Code Size 2050 Byte
Status AC
Exec Time 545 ms
Memory 25744 KiB

Compile Error

./Main.cpp: In function 'void balance()':
./Main.cpp:12:26: warning: comparison of integer expressions of different signedness: 'std::multiset<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   12 |         while(yes.size() > cnt_2)
      |               ~~~~~~~~~~~^~~~~~~
./Main.cpp:18:41: warning: comparison of integer expressions of different signedness: 'std::multiset<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   18 |         while(!no.empty() && yes.size() < cnt_2)
      |                              ~~~~~~~~~~~^~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 550 / 550
Status
AC × 2
AC × 22
Set Name Test Cases
Sample 00-sample-01.txt, 00-sample-02.txt
All 00-sample-01.txt, 00-sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt
Case Name Status Exec Time Memory
00-sample-01.txt AC 1 ms 3704 KiB
00-sample-02.txt AC 1 ms 3712 KiB
01-01.txt AC 32 ms 3712 KiB
01-02.txt AC 22 ms 3804 KiB
01-03.txt AC 24 ms 3820 KiB
01-04.txt AC 50 ms 3800 KiB
01-05.txt AC 37 ms 3816 KiB
01-06.txt AC 304 ms 22504 KiB
01-07.txt AC 545 ms 25744 KiB
01-08.txt AC 270 ms 18796 KiB
01-09.txt AC 251 ms 22032 KiB
01-10.txt AC 227 ms 17772 KiB
01-11.txt AC 214 ms 25704 KiB
01-12.txt AC 380 ms 25708 KiB
01-13.txt AC 377 ms 25676 KiB
01-14.txt AC 402 ms 25680 KiB
01-15.txt AC 103 ms 11212 KiB
01-16.txt AC 241 ms 23628 KiB
01-17.txt AC 178 ms 24024 KiB
01-18.txt AC 218 ms 19688 KiB
01-19.txt AC 307 ms 20312 KiB
01-20.txt AC 170 ms 13740 KiB