QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#846715#9907. 最大匹配 2 nullptr_qwq0 590ms52788kbC++143.6kb2025-01-07 12:43:412025-01-07 12:43:42

Judging History

你现在查看的是最新测评结果

  • [2025-01-07 12:43:42]
  • 评测
  • 测评结果:0
  • 用时:590ms
  • 内存:52788kb
  • [2025-01-07 12:43:41]
  • 提交

answer

// 私は猫です

#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
#define pb push_back
#define mkp make_pair
#define fi first
#define se second
#define inf 1000000000
#define infll 1000000000000000000ll
#define pii pair<int,int>
#define rep(i,a,b,c) for(int i=(a);i<=(b);i+=(c))
#define per(i,a,b,c) for(int i=(a);i>=(b);i-=(c))
#define F(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define dF(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define cmh(sjy) while(sjy--)
#define lowbit(x) (x&(-x))
#define HH printf("\n")
#define eb emplace_back
#define poly vector<int>
#define SZ(x) ((int)x.size())
using namespace std;
template<typename T>inline void chkmax(T &x,const T &y){ x=std::max(x,y); }
template<typename T>inline void chkmin(T &x,const T &y){ x=std::min(x,y); }
const int mod=998244353,maxn=200005;
int a[maxn],b[maxn],n,zsy,Root[maxn],cnt=0,ans=0;
namespace seg1{
	int t[maxn<<2],mn[maxn<<2],leaf[maxn];
	void build(int o,int l,int r){ mn[o]=t[o]=0; if(l==r)return leaf[l]=o,void(); int mid=(l+r)>>1; build(o<<1,l,mid),build(o<<1|1,mid+1,r); }
	// inline void add(int pos,int val){
		// int o=leaf[pos]; t[o]+=val,mn[o]+=val,o>>=1;
		// for(;o;o>>=1)t[o]+=val,mn[o]=min(mn[o<<1],mn[o<<1|1]+t[o<<1]);
	// }
	void update(int o,int l,int r,int pos,int val){
		t[o]+=val;
		if(l==r)return mn[o]+=val,void();
		int mid=(l+r)>>1; (pos<=mid)?update(o<<1,l,mid,pos,val):update(o<<1|1,mid+1,r,pos,val);
		mn[o]=min(mn[o<<1],mn[o<<1|1]+t[o<<1]);
	}
	void add(int pos,int val){
		update(1,0,n,pos,val);
	}
	inline int query(){ return cnt+mn[1]; }
}
namespace seg{
	int tot,ls[maxn<<6],rs[maxn<<6],t[maxn<<6],tag[maxn<<6];
	void update(int &o,int l,int r,int ql,int qr,int val){
		if(ql>qr)return;
		if(!o)o=++tot;
		if(ql<=l&&qr>=r)return t[o]+=val,tag[o]+=val,void();
		int mid=(l+r)>>1;
		if(ql<=mid)update(ls[o],l,mid,ql,qr,val);
		if(qr>mid)update(rs[o],mid+1,r,ql,qr,val);
		t[o]=tag[o]+min(t[ls[o]],t[rs[o]]);
	}
	int find1(int o,int l,int r,int k){
		if(l==r)return l;
		int mid=(l+r)>>1; k-=tag[o];
		return (t[rs[o]]<=k)?find1(rs[o],mid+1,r,k):find1(ls[o],l,mid,k);
	}
	int find2(int o,int l,int r,int k){
		if(l==r)return l;
		int mid=(l+r)>>1; k-=tag[o];
		return (t[ls[o]]<k)?find2(ls[o],l,mid,k):find2(rs[o],mid+1,r,k);
	}
}
set<int>sl[maxn],sr[maxn];
void insert_Left(int col,int pos){
	auto it=sr[col].lower_bound(pos);
	if(it!=sr[col].end()){
		const int x=*it; sr[pos].erase(x);
		seg::update(Root[col],0,n,pos,x-1,1),seg1::add(x,1),--cnt,++ans;
	} else{
		seg::update(Root[col],0,n,pos,n,1);
		const int x=seg::find1(Root[col],0,n,0)+1;
		seg::update(Root[col],0,n,x,n,-1),sl[col].insert(x),seg1::add(x,1);
	}
}
void insert_Right(int col,int pos){
	auto it=sl[col].upper_bound(pos);
	if(it!=sl[col].begin()){
		const int x=*--it; sl[pos].erase(x);
		seg::update(Root[col],0,n,x,pos-1,1),seg1::add(x,-1),++ans;
	} else{
		seg::update(Root[col],0,n,pos,n,-1);
		const int x=seg::find2(Root[col],0,n,0);
		seg::update(Root[col],0,n,x,n,1),sr[col].insert(x),seg1::add(x,-1),++cnt;	
	}
}
void solve(){
	cin>>n>>zsy,seg1::build(1,0,n);
	F(i,1,n)cin>>a[i];
	F(i,1,n)cin>>b[i];
	F(i,1,n)if(!b[i])insert_Left(a[i],i); else insert_Right(a[i],i);
	cout<<ans+seg1::query()<<'\n';
	F(__,1,zsy){
		int pos,x,y; cin>>pos>>x>>y;
		if(!b[pos])insert_Right(a[pos],pos); else insert_Left(a[pos],pos);
		--ans,a[pos]=x,b[pos]=y;
		if(!b[pos])insert_Left(a[pos],pos); else insert_Right(a[pos],pos);
		cout<<ans+seg1::query()<<'\n';
	}
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int zsy=1;
	F(____,1,zsy)solve();
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 10
Accepted
time: 0ms
memory: 34108kb

input:

100 0
1 1 2 1 2 2 2 2 2 1 2 1 1 2 2 1 2 2 2 2 2 1 1 2 2 2 1 2 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 1 2 1 2 1 1 1 2 2 2 2 2 2 1 1 1 2 1 1 1 1 1 2 2 1 1 2 1 1 2 1 1 2 2 2 1 2 2 2 1 2 1 2 1 2 1 1 2 1 1 2
1 1 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 1 1 1 1 1 ...

output:

45

result:

ok "45"

Test #2:

score: 10
Accepted
time: 9ms
memory: 31048kb

input:

100 0
2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 2 2 1 2 1 2 2 1 1 2 2 1 1 1 2 1 1 1 2 2 1 2 1 1 2 2 2 2 2 1 2 1 2 2 1 1 2 1 2 2 1 1 2 2 1 1 1 2 2 1 2 1 2 1 2 2 2 1 2 1 1 2 2 2 2 1 1 1 1 1 1 1 2 2 1 2 1 2 2 2 2 1 2
0 0 0 1 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 0 0 1 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 1 0 1 1 0 1 1 1 1 0 ...

output:

43

result:

ok "43"

Test #3:

score: 0
Wrong Answer
time: 4ms
memory: 34248kb

input:

100 0
2 2 3 3 4 4 3 2 4 4 1 2 3 4 3 4 4 3 3 2 3 1 2 4 1 3 1 4 3 3 4 4 3 3 1 4 1 1 2 2 1 3 4 3 3 4 3 3 4 3 4 3 4 4 1 1 1 4 3 1 2 1 2 3 3 3 2 1 1 1 1 3 3 2 4 2 3 4 1 4 1 4 1 1 2 1 1 1 1 1 4 4 2 3 2 1 2 3 1 4
1 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 1 1 1 0 1 1 1 0 1 0 1 1 1 0 0 1 ...

output:

34

result:

wrong answer 1st words differ - expected: '37', found: '34'

Subtask #2:

score: 0
Wrong Answer

Test #11:

score: 0
Wrong Answer
time: 3ms
memory: 31932kb

input:

2000 0
2 2 1 1 2 1 2 2 2 1 1 1 2 1 2 2 1 2 2 1 2 1 2 1 1 2 1 2 2 1 2 2 2 1 1 1 1 1 1 2 1 1 2 2 1 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 2 2 1 1 2 1 1 2 2 1 2 1 1 1 1 2 1 1 1 1 1 2 2 2 2 1 2 2 1 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 1 1 1 2 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1 2 2 1 2 1 1 1...

output:

957

result:

wrong answer 1st words differ - expected: '954', found: '957'

Subtask #3:

score: 0
Wrong Answer

Test #31:

score: 0
Wrong Answer
time: 103ms
memory: 49644kb

input:

200000 0
1 2 2 2 2 2 2 1 1 2 2 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 2 2 2 1 2 2 1 2 1 1 2 2 2 2 1 2 2 1 2 1 1 2 1 1 2 1 2 2 1 2 2 2 1 1 2 1 1 1 2 2 2 2 1 1 2 2 1 1 2 1 2 2 2 2 2 1 1 2 2 2 2 1 2 1 2 2 2 1 2 2 2 2 1 2 2 2 1 1 1 2 2 1 2 2 2 1 1 1 1 1 2 1 2 1 2 1 2 1 2 1 2 2 1 2 2 2 1 1 1 2 1 2 1 1 1...

output:

99508

result:

wrong answer 1st words differ - expected: '99478', found: '99508'

Subtask #4:

score: 0
Wrong Answer

Test #61:

score: 0
Wrong Answer
time: 590ms
memory: 52760kb

input:

200000 200000
1 2 1 2 2 1 2 1 2 1 1 2 1 1 2 1 1 2 1 2 2 1 2 2 2 1 2 2 2 2 2 1 2 1 2 1 1 2 1 1 2 2 2 1 1 2 2 1 2 1 2 1 1 2 1 2 2 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 2 2 2 2 2 1 1 2 2 1 2 2 2 2 2 1 1 1 2 2 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 1 1 1 2 2 2 2 2 2 1 1 2 2 2 1 2 2 2 2 1 1 1 2 2 1 2 2 2 1 1 1 2 ...

output:

99633
99633
99633
99633
99632
99631
99631
99632
99633
99633
99633
99633
99634
99633
99633
99632
99632
99632
99633
99634
99634
99633
99632
99631
99632
99633
99633
99634
99633
99632
99631
99631
99631
99630
99630
99629
99630
99629
99629
99629
99630
99630
99629
99630
99630
99630
99630
99629
99628
99628
...

result:

wrong answer 1st words differ - expected: '99575', found: '99633'

Subtask #5:

score: 0
Wrong Answer

Test #71:

score: 0
Wrong Answer
time: 239ms
memory: 40480kb

input:

100000 100000
2 1 1 1 1 1 1 2 2 2 2 1 2 1 1 1 2 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 1 1 2 2 2 2 1 1 2 2 2 1 2 2 1 2 1 2 2 2 2 1 2 1 1 1 2 2 2 1 1 2 1 1 1 2 1 2 2 2 1 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 1 2 1 2 1 2 2 2 2 2 2 2 1 1 1 1 2 1 2 1 1 1 1 2 2 2 1 2 1 1 1 2 2 2 1 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 ...

output:

49865
49864
49864
49864
49863
49863
49863
49864
49863
49863
49862
49863
49863
49862
49861
49860
49859
49859
49859
49859
49859
49859
49859
49859
49858
49858
49859
49859
49860
49860
49859
49859
49858
49857
49857
49857
49857
49856
49856
49857
49857
49856
49855
49854
49854
49854
49854
49853
49853
49853
...

result:

wrong answer 1st words differ - expected: '49860', found: '49865'

Subtask #6:

score: 0
Wrong Answer

Test #101:

score: 0
Wrong Answer
time: 560ms
memory: 52788kb

input:

200000 200000
1 2 1 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 2 2 1 2 2 2 2 1 2 1 1 1 1 2 1 2 2 1 2 2 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 1 2 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 1 1 1 1 2 2 2 1 1 2 2 1 1 1 2 2 1 1 2 2 2 2 2 2 1 2 1 1 2 2 2 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 2 1 1 2 2 1 2 1 ...

output:

99498
99498
99499
99500
99501
99500
99500
99500
99500
99500
99501
99501
99502
99502
99502
99501
99501
99500
99501
99501
99502
99502
99502
99501
99501
99501
99500
99499
99499
99499
99499
99499
99500
99500
99500
99499
99498
99498
99499
99498
99499
99499
99498
99498
99499
99499
99498
99497
99497
99497
...

result:

wrong answer 1st words differ - expected: '99491', found: '99498'