[loj3220]Terytoria

技术[loj3220]Terytoria [loj3220]Terytoria显然两维是独立的,不妨考虑其中一维的答案
将其离散,枚举交包含的某一段(若不存在即交为空),进而即可确定所有段的方向,用线段

[loj3220]Terytoria

显然两维是独立的,不妨考虑其中一维的答案

将其离散,枚举交包含的某一段(若不存在即交为空),进而即可确定所有段的方向,用线段树维护取到最大值的位置数即可

时间复杂度为$o(n\log n)$,可以通过

1 #包括息税前利润/标准利润.h

2使用命名空间标准;

3 #定义N 500005

4 #定义陆线(landlines的缩写)长

5 #定义pii pairint,int

6 #首先定义船方不负担装货费用

7 #定义硒秒

8 #定义L (k1)

9 #定义R (L 1)

10 #定义mid (l r1)

11 int n,X,Y,M,vis[N],tag[N3],mx[N3],f[N3],DTA[N1];

12个ll ans

13矢量v 0;

14 vectorpairint,int v;

15结构数据{

16国际,r;

17 }x[N],y[N],a[N];

18 void build(int k,int l,int r){ 0

19 if(l==r){ 0

20 mx[k]=n-dta[l],f[k]=v 0[l 1]-v 0[l];

21返回;

22 }

23建(左,左,中),建(R,中间1,R);

24 mx[k]=max(mx[L],mx[R]),f[k]=0;

25 if(MX[k]==MX[L])f[k]=f[L];

26 if(MX[k]==MX[R])f[k]=f[R];

27 MX[k]=标记[k];

28 }

29 void update(int k,int l,int r,int x,int y,int z){ 0

30 if ((ly)||(xr))返回;

31 if((x=l)(r=y)){ 0

32标签[k]=z,MX[k]=z;

33返回;

34 }

35更新(L,L,mid,x,y,z);

36更新(R,mid 1,R,x,y,z);

37 mx[k]=max(mx[L],mx[R]),f[k]=0;

38 if(MX[k]==MX[L])f[k]=f[L];

39 if(MX[k]==MX[R])f[k]=f[R];

40 MX[k]=标签[k];

41 }

42 void add(int id){ 0

43如果(!vis[id])(

44标记[1] -,MX[1]-;

45更新(1,0,M,a[id].l,a[id].r-1,2);

46 vis[id]=1;

47 }

48 else{

49标记[1],MX[1];

50更新(1,0,M,a[id].l,a[id].r-1,-2);

51 vis[id]=0;

52 }

53 }

54 int calc(int m){ 0

55 v.clear(),0v。clear();

56 memset(vis,0,sizeof(vis));

57记忆集(标记,0,sizeof(标记));

58 memset(dta,0,sizeof(DTA));

59表示(int I=1;I=n;I){ 0

60 v.push_back(make_pair(a[i]).l,I));

61 v.push_back(make_pair(a[i]).r,I));

62 }

排序(v.begin()、v . end());

64v 0。push _ back(0);

65表示(int I=0;I(n1);(一)

66 if((!i)||(v[i].菲v[i-1].fi))v0.push_back(v[i]).fi);

67 M=v0.size()-1,v0。push _ back(M);

68表示(int I=1;I=n;I){ 0

69 a[i].l=下界(v0.begin(),v0.end(),a[i].l)-v 0。begin();

70 a[i].r=下界(v0.begin(),v0.end(),a[i].r)-v 0。begin();

71避免双重征税协定.l],dta[a[i].r]-;

72 }

73表示(int I=1;I=M;I)DTA[I]=DTA[I-1];

74建(1,0,M);

75 int ans=0;

76表示(int I=0;I(n1);I){ 0

77 add(v[i]).se);

78 if (mx[1]==n)ans=max(ans,f[1]);

79 }

80个返回美国国家标准(American National Standards的缩写)

81 }

82 int main(){ 0

83 scanf('%d%d%d ',n,X,Y);

84表示(int I=1;I=n;I){ 0

85 scanf('%d%d%d%d ',x[i].我,你.l,x[i].r,y[i].r);

86 if (x[i]).lx[i].r)交换(x[i].l,x[i].r);

87 if (y[i]).撒谎r)交换(y[i].我,你.r);

88 }

89 memcpy(a,x,sizeof(a));

90 ans=calc(X);

91 memcpy(a,y,sizeof(a));

92 ans *=calc(Y);

93 printf('%lld\n ',ans);

94返回0;

95 }

查看代码

另外,还有一个更加巧妙的做法:注意到每一个区间的两种选择是互补的,对每一段区间异或一个随机值,那么可以认为众数的出现次数即为答案,这直接排序即可得到

关于错误的概率,并不太会分析,反正大概就对了QAQ

时间复杂度为$o(n\log n)$,也可以通过(比第一种算法常数更小)

1 #包括息税前利润/标准利润.h

2使用命名空间标准;

3 #定义N 500005

4 #定义陆线(landlines的缩写)长

5 #定义llu无符号陆线(landlines的缩写)

6矢量电视;

七整数n,X,Y;

8个ll ans

9 N1;

10 pairllu,IntP[N];

11结构数据{

12国际,r;

13 }x[N],y[N],a[N];

14 llu rnd(){ 0

15 llu x=0;

16表示(int I=0;i4;I)x=((x16)| rand()%(116));

17返回x;

18 }

19 int calc(int m){ 0

20v。clear();

21 memset(dta,0,sizeof(DTA));

22表示(int I=1;I=n;I){ 0

23 v.push_back(a[i]).l);

24 v.push_back(a[i]).r);

25 }

26 v.push_back(0),v . push _ back(m);

排序(v.begin()、v . end());

28表示(int I=1;I=n;I){ 0

29 a[i].l=下界开始,结束,结束.l)-v . begin();

页:1。r=下界(v.begin()、v.end()、a[i]).r)-v . begin();

31 llu p=rnd();

32 DTA[a[I]].l]^=p,dta[a[i]。r]^=p;

33 }

34为(int I=1);I=(n1);(i)dta[i]^=DTA[I-1];

35表示(int I=0);I=(n1);P[I]=make _ pair(DTA[I],v[I 1]-v[I]);

36个产出(p,p(n1)1);

37 int cnt=0,ans=0

38为(int I=0);I=(n1);>年;

39碳纳米管=磷[碘]。第二:

40 if ((i==(n1))||(P[i 1]).第一!=P[i].第一个)

41岁=最大(年,CNT);

42 cnt=0

43 }

44 }

45岁返回;

46 }

47 int main()

48 srand(时间(0));

49个扫描文件(“%d%d%d”、“n”、“x”、“y”);

50为(int I=1);i=n(I)>;

51个扫描文件(%d%d%d%d ",x[i]).我,你.页:1。r,y[i].(r)执行下列操作:

52 if (x[i]).lx[i].r)交换(x[i]).页:1。(r)执行下列操作:

53 if (y[i]).ly[我]。r)交换(和[i].我,你.(r)执行下列操作:

54 }

55 memcpy(a、x、sizeof(a));

56岁=计算;

57 memcpy(a,y,sizeof(a));

58岁*=计算(y);

59 printf("% lld \ n ",年);

60返回0;

61 }

视图代码

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/151784.html

(0)

相关推荐

  • 渗的组词,2021年琥珀课文的生字组词

    技术渗的组词,2021年琥珀课文的生字组词2021年《琥珀》课文的生字组词渗的组词:怒(nù),怒火、怒吼、怒骂、怒斥、发怒、怒气冲冲、怒发冲冠、怒目而视。吼(hǒu),吼叫、怒吼、一声吼。
    脂(zhī),油脂、胭脂、脂

    生活 2021年10月24日
  • zookeeper和eureka使用场景(eureka与zookeeper差别)

    技术如何进行ZooKeeper与Eureka的比较如何进行ZooKeeper与Eureka的比较,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获

    攻略 2021年12月24日
  • Java并发编程相关概念及注意事项是什么

    技术Java并发编程相关概念及注意事项是什么Java并发编程相关概念及注意事项是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。相应的概念

    攻略 2021年10月23日
  • 怎么理解iOS开发中Cocos2d-x的CCSpriteBatchNode

    技术怎么理解iOS开发中Cocos2d-x的CCSpriteBatchNode怎么理解iOS开发中Cocos2d-x的CCSpriteBatchNode,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解

    攻略 2021年11月11日
  • [源码解析] PyTorch 分布式(9) ----

    技术[源码解析] PyTorch 分布式(9) ---- [源码解析] PyTorch 分布式(9) ----- DistributedDataParallel 之初始化前文我们对DDP的一些支撑模块已

    礼包 2021年11月23日
  • HDFS是怎么设计架构的

    技术HDFS是怎么设计架构的这篇文章给大家分享的是有关HDFS是怎么设计架构的的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、Hadoop 简介Hadoop版本刚出来的时候是为了解决两个问题

    攻略 2021年12月9日