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
2026-01-11 17:54:37+0900
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
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