Submission #68727539


Source Code Expand

#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("unroll-loops")
using namespace std;

using ll=long long;

#define rng(i,a,b) for(int i=int(a);i<int(b);i++)
#define rep(i,b) rng(i,0,b)
#define gnr(i,a,b) for(int i=int(b)-1;i>=int(a);i--)
#define per(i,b) gnr(i,0,b)
#define pb push_back
#define eb emplace_back
#define a first
#define b second
#define bg begin()
#define ed end()
#define all(x) x.bg,x.ed
#define si(x) int(x.size())
#ifdef LOCAL
#define dmp(x) cerr<<__LINE__<<" "<<#x<<" "<<x<<endl
#else
#define dmp(x) void(0)
#endif

template<class t,class u> bool chmax(t&a,u b){if(a<b){a=b;return true;}else return false;}
template<class t,class u> bool chmin(t&a,u b){if(b<a){a=b;return true;}else return false;}

template<class t> using vc=vector<t>;
template<class t> using vvc=vc<vc<t>>;

using P=pair<int,int>;
using vi=vc<int>;
const uint mod=998244353;
struct mint{
	uint v;
	mint(ll vv=0){s(vv%mod+mod);}
	mint& s(uint vv){
		v=vv<mod?vv:vv-mod;
		return *this;
	}
	mint operator-()const{return mint()-*this;}
	mint& operator+=(const mint&r){return s(v+r.v);}
	mint&operator-=(const mint&r){return s(v+mod-r.v);}
	mint&operator*=(const mint&r){v=(unsigned long long)v*r.v%mod;return *this;}
	mint&operator/=(const mint&r){return *this*=r.inv();}
	mint operator+(const mint&r)const{return mint(*this)+=r;}
	mint operator-(const mint&r)const{return mint(*this)-=r;}
	mint operator*(const mint&r)const{return mint(*this)*=r;}
	mint operator/(const mint&r)const{return mint(*this)/=r;}
	mint pow(ll n)const{
		if(n<0)return inv().pow(-n);
		mint res(1),x(*this);
		while(n){
			if(n&1)res*=x;
			x*=x;
			n>>=1;
		}
		return res;
	}
	mint inv()const{return pow(mod-2);}
};
#define INF 100000000000000000LL

void solve(){
	int n,q;
	cin>>n>>q;
	vc<P> at(n);
	vc<int> B(n);
	for(int i=0;i<n;i++) cin>>at[i].b>>at[i].a;
	for(int i=0;i<n;i++) cin>>B[i];
	sort(at.begin(),at.end());
	sort(B.begin(),B.end(), greater <int>());
	int S = min(n, 4000);
	int m=n-S;
	vc<int> A(m);
	for(int i=0;i<m;i++) A[i] = at[i+S].b;
	sort(A.begin(),A.end(),greater <int>());

	vc<ll> sa(m+1), sb(n+1);
	auto consta=[&]()->void{
		sa[0]=0;
		for(int i=0;i<m;i++) sa[i+1]=sa[i]+A[i];
	};
	auto constb=[&]()->void{
		sb[0]=0;
		for(int i=0;i<n;i++) sb[i+1]=sb[i]+B[i];
	};

	consta();
	constb();
	vc<int> opt(S+1);
	vc<ll> ans(S+1);
	auto find_opt=[&](int d,int l,int r){
		ll mx=-INF;
		for(int i=l;i<=r;i++){
			if(i+d<=n&&mx<sa[i]-sb[i+d]){
				mx=sa[i]-sb[i+d];
				opt[d]=i;
			}
		}
		ans[d]=mx;
	};
	auto recur_opt=[&](int a,int b,int l,int r, auto self){
		if(a>=b) return;
		if(a+1==b) find_opt(a,l,r);
		else{
			int m=(a+b)/2;
			find_opt(m,l,r);
			self(a,m,l,opt[m],self);
			self(m+1,b,opt[m],r,self);
		}
	};
	auto pre_calc=[&]()->void{
		recur_opt(0,S+1,0,m,recur_opt);
	};
	pre_calc();
	//for(int i=0;i<=S;i++) cout<<i<<" "<<ans[i]<<endl;
	vc<P> zan(S);
	for(int i=0;i<S;i++) zan[i]=P(at[i].b,at[i].a);
	sort(zan.begin(),zan.end(),greater<P>());
	int th=at[S-1].a;
	priority_queue <int, vector <int>, greater <int> > que;
	for(int i=0;i<S;i++) que.push(at[i].a);
	for(int i=0;i<=q;i++){
		//find answer in res
		ll res=ans[0],sum=0;
		for(int j=0;j<S;j++){
			sum+=zan[j].a;
			res=max(res,sum+ans[j+1]);
		}
		cout<<res<<endl;
		if(i==q) break;
		int x,y;
		cin>>x>>y;
		//x=rand()%(1<<30), y=rand()%(1<<30);

		ll a=res%(1LL<<30);
		x^=a, y^=a;

		//y = i+n+1;

		que.push(y);
		int mn=que.top();que.pop();
		if(mn<y){
			for(int j=0;j<S;j++){
				if(zan[j].b==mn){
					zan[j]=P(x,y);
					for(int k=j;k<S-1;k++){
						if(zan[k+1].a>x) swap(zan[k],zan[k+1]);
						else break;
					}
					for(int k=j;k>0;k--){
						if(zan[k-1].a<x) swap(zan[k],zan[k-1]);
						else break;
					}
					break;
				}
			}
			if(mn==th){
				//cout<<"YES"<<endl;
				//reconstruct whole thing
				for(int j=0;j<S;j++) at[j]=P(zan[j].b,zan[j].a);
				sort(at.begin(),at.end());
				for(int i=0;i<m;i++) A[i] = at[i+S].b;
				sort(A.begin(),A.end(),greater <int>());
				consta();
				pre_calc();
				for(int i=0;i<S;i++) zan[i]=P(at[i].b,at[i].a);
				sort(zan.begin(),zan.end(),greater<P>());
				th=at[S-1].a;
				while(!que.empty()) que.pop();
				for(int i=0;i<S;i++) que.push(at[i].a);
			}
		}
	}
}
int main(){
	cin.tie(0);
	ios::sync_with_stdio(0);
	cout<<fixed<<setprecision(20);
	int T=1;
	while(T--) solve();
}

Submission Info

Submission Time
Task E - Politeness Matters
User yutaka1999
Language C++ 23 (Clang 16.0.6)
Score 1200
Code Size 4520 Byte
Status AC
Exec Time 3672 ms
Memory 12236 KiB

Compile Error

./Main.cpp:2:13: warning: unknown pragma ignored [-Wunknown-pragmas]
#pragma GCC optimize ("Ofast")
            ^
./Main.cpp:3:13: warning: unknown pragma ignored [-Wunknown-pragmas]
#pragma GCC optimize ("unroll-loops")
            ^
2 warnings generated.

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1200 / 1200
Status
AC × 3
AC × 28
Set Name Test Cases
Sample 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt
All 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt, 01-018.txt, 01-019.txt, 01-020.txt, 01-021.txt, 01-022.txt, 01-023.txt, 01-024.txt, 01-025.txt
Case Name Status Exec Time Memory
00-sample-001.txt AC 1 ms 3464 KiB
00-sample-002.txt AC 1 ms 3544 KiB
00-sample-003.txt AC 1 ms 3504 KiB
01-001.txt AC 1 ms 3568 KiB
01-002.txt AC 1 ms 3432 KiB
01-003.txt AC 1 ms 3528 KiB
01-004.txt AC 3 ms 3560 KiB
01-005.txt AC 483 ms 10648 KiB
01-006.txt AC 1446 ms 7404 KiB
01-007.txt AC 19 ms 4740 KiB
01-008.txt AC 2693 ms 11144 KiB
01-009.txt AC 2700 ms 11236 KiB
01-010.txt AC 2688 ms 11156 KiB
01-011.txt AC 3534 ms 11160 KiB
01-012.txt AC 3462 ms 11224 KiB
01-013.txt AC 3535 ms 11604 KiB
01-014.txt AC 3559 ms 11132 KiB
01-015.txt AC 3475 ms 11024 KiB
01-016.txt AC 3500 ms 11232 KiB
01-017.txt AC 3527 ms 12236 KiB
01-018.txt AC 3566 ms 12220 KiB
01-019.txt AC 3543 ms 12232 KiB
01-020.txt AC 3660 ms 11244 KiB
01-021.txt AC 3666 ms 11192 KiB
01-022.txt AC 3672 ms 11176 KiB
01-023.txt AC 3506 ms 11444 KiB
01-024.txt AC 3504 ms 11432 KiB
01-025.txt AC 3560 ms 11436 KiB