Submission #1336762

#TimeUsernameProblemLanguageResultExecution timeMemory
1336762boclobanchatPort Facility (JOI17_port_facility)C++20
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e6+5;
const int mod=1e9+7;
const int inv=5e8+4;
struct fenwicktree
{
	int fen[MAXN];
	int getlog(long long n) { return 63-__builtin_clzll(n); }
	void update(int i,int n,int val) { for(;i<=n;i+=i&-i) fen[i]+=val; }
	int get(int i) { int ans=0;for(;i;i-=i&-i) ans+=fen[i];return ans; }
	int walk(int n,int val) { if(val<0) return 1;int ans=0;for(int i=getlog(n);i+1;i--) if(ans+(1<<i)<=n&&val>=fen[ans+(1<<i)]) val-=fen[ans+=(1<<i)];return ans+1; }
};
fenwicktree fa,fb,fc,fd;
pair<int,int> A[MAXN];
int dsu[MAXN],pos[MAXN];
bool ck[MAXN];
int root(int i)
{
	if(!dsu[i]) return i;
	return dsu[i]=root(dsu[i]);
}
bool merge(int i,int j)
{
	if((i=root(i))==(j=root(j))) return false;
	dsu[j]=i;
	return true;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int n,ans=1;
	cin>>n;
	for(int i=1;i<=n;i++) cin>>A[i].first>>A[i].second;
	sort(A+1,A+n+1);
	for(int i=1;i<=n;i++)
	{
//		ans=ans*2%mod,pos[A[i].first]=pos[A[i].second]=i;
//		int a=fa.get(A[i].second)-fa.get(A[i].first);
//		int b=fb.get(A[i].second)-fb.get(A[i].first);
//		if(a&&b) return cout<<0,0;
//		if(!a) fa.update(A[i].second,n*2,1);
//		else fb.update(A[i].second,n*2,1);
		int c=fd.get(A[i].first),res;
		while((res=fd.walk(n*2,c))<=A[i].second)
		{
			if(merge(pos[res],i)) ans=1LL*ans*inv%mod;
			c++;
		}
		fc.update(A[i].second,n*2,1);
		if(!kc[A[i].second]) kc[A[i].second]=true,fd.update(A[i].second,n*2,1);
		int pre=fc.walk(n*2,fc.get(A[i].second)-2);
		if(!kc[pre]) kc[pre]=true,fd.update(pre,n*2,1);
		int nex=fc.walk(n*2,fc.get(A[i].second));
		if(!kc[nex]) kc[nex]=true,fd.update(pre,n*2,1);
	}
	cout<<ans;
}

Compilation message (stderr)

port_facility.cpp: In function 'int main()':
port_facility.cpp:53:21: error: 'kc' was not declared in this scope; did you mean 'c'?
   53 |                 if(!kc[A[i].second]) kc[A[i].second]=true,fd.update(A[i].second,n*2,1);
      |                     ^~
      |                     c
port_facility.cpp:55:21: error: 'kc' was not declared in this scope; did you mean 'c'?
   55 |                 if(!kc[pre]) kc[pre]=true,fd.update(pre,n*2,1);
      |                     ^~
      |                     c
port_facility.cpp:57:21: error: 'kc' was not declared in this scope; did you mean 'c'?
   57 |                 if(!kc[nex]) kc[nex]=true,fd.update(pre,n*2,1);
      |                     ^~
      |                     c