关于火车头
  • 板块学术版
  • 楼主tornado01
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/4/30 16:57
  • 上次更新2024/4/30 19:58:07
查看原帖
关于火车头
716013
tornado01楼主2024/4/30 16:57

这篇代码:

#pragma GCC optimize(3)
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#include<bits/stdc++.h>
using namespace std;
namespace IO {
#define iL (1 << 20)
char ibuf[iL], *iS = ibuf + iL, *iT = ibuf + iL;
#define gc() ((iS == iT) ? (iT = (iS = ibuf) + fread(ibuf, 1, iL, stdin), iS == iT ? EOF : *iS ++) : *iS ++)
template<class T> inline void read(T &x) {
  x = 0;int f = 0;char ch = gc();
  for (; !isdigit(ch); f |= ch == '-', ch = gc());
  for (; isdigit(ch); x = (x << 1) + (x << 3) + (ch ^ 48), ch = gc());
  x = (f == 1 ? ~ x + 1 : x);
}
template<class T, class... Args> inline void read(T &x, Args&... args) { read(x), read(args...); }
template<class T> inline void readch(T &x) { char ch = gc(); for (; !isalpha(ch); ch = gc()); x = ch; }
char Out[iL], *iter = Out;
#define flush() fwrite(Out, 1, iter - Out, stdout), iter = Out
template<class T> inline void write(T x, char ch = '\n') {
  T l, c[35];
  if (x < 0) *iter ++ = '-', x = ~ x + 1;
  for (l = 0; !l || x; c[l] = x % 10, l++, x /= 10);
  for (; l; -- l, *iter ++ = c[l] + '0');*iter ++ = ch;
  flush();
}
template<class T, class... Args> inline void write(T x, Args... args) { write(x, ' '), write(args...); }
} // IO
using namespace IO;
const int N=5e5+7,B=2400;
const int mod=1e9+7;
inline int quick(int sum,int b)
{
	int res=1;
	while(b)
	{
		if(b&1) res=1ll*res*sum%mod;
		sum=1ll*sum*sum%mod,b>>=1;
	}
	return res;
}
int n,m,l,r,x[N],y[N];
long long sum,al=1;
bitset<B> st[N];
bool vis[N];
int t[4000500],cnt[500500],inv[500500],tl[4000400],tr[4000400];
inline void build(int u,int l,int r)
{
	tl[u]=l,tr[u]=r;
	if(l==r) return ;
	int mid=(l+r)>>1;
	build(u<<1,l,mid),build(u<<1|1,mid+1,r);
}
inline void updata(int x, int ll, int rr, int d)
{
	if(ll<=tl[x]&&rr>=tr[x]){t[x]=d;return ;}
	if(t[x]) t[x<<1]=t[x<<1|1]=t[x],t[x]=0;
	int mid=(tl[x]+tr[x])>>1;
	if(ll<=mid) updata((x<<1),ll,rr,d);
	if(rr>mid) updata((x<<1|1),ll,rr,d);
}
inline int query(int x, int d)
{
	if(tl[x]==tr[x]) return t[x];
	if(t[x]) t[x<<1]=t[x<<1|1]=t[x],t[x]=0;
	int mid=(tl[x]+tr[x])>>1;
	return (d<=mid)?query(x<<1,d):query(x<<1|1,d);
}
int main()
{
	//freopen("P10365_98.in","r",stdin);
	read(n);
	const int m=2*n;
	build(1,1,m);
	for(int i=1;i<=n;i++)
	{
		read(l,r);
		x[i]=query(1,l),y[i]=query(1,r);
		updata(1,l,r,i);
	}
	for(int i=1;i<=n;i++) al=al*i%mod;
	inv[0]=inv[1]=1;
	for(int i=2;i<=n;i++) inv[i]=(mod-1ll*mod/i*inv[mod%i]%mod)%mod;
	int l=1;
	while(l<=n)
	{
		const int r=min(n,l+B-1);
		int i=r+1;
		while(--i)
		{
			if(i>=l) st[i][i-l]=true,vis[i]=true;
			if(vis[i]==true)
			{
				cnt[i]+=st[i].count();
				if(x[i]) st[x[i]]|=st[i],vis[x[i]]=true;
				if(y[i]&&x[i]!=y[i]) st[y[i]]|=st[i],vis[y[i]]=true;
				st[i].reset();vis[i]=false;
			}
		}
		l=r+1;
	}
	for(int i=1;i<=n;i++) sum=(sum+inv[cnt[i]]);sum%=mod;
	write(sum*quick(al,mod-1)%mod);
	return 0;
}

在本地和 LOJ 上都能过编,为啥在 Luogu 上不行?

2024/4/30 16:57
加载中...