bzoj 3223 Tyvj 1729 文艺平衡树

区间翻转233

 1 #include<bits/stdc++.h>
 2 #define N 100005
 3 #define LL long long
 4 #define inf 0x3f3f3f3f
 5 #define ls tr[x][0]
 6 #define rs tr[x][1]
 7 using namespace std;
 8 inline int ra()
 9 {
10     int x=0,f=1; char ch=getchar();
11     while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();}
12     while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
13     return x*f;
14 }
15 struct SPLAY{
16     bool rev[N];
17     int fa[N],tr[N][2],root,v[N],size[N],w[N],cnt;
18     bool which(int x){return tr[fa[x]][1]==x;}
19     void update(int x){size[x]=size[ls]+size[rs]+1;}
20     void rotate(int x)
21     {
22         int y=fa[x],z=fa[y]; bool nx=which(x),ny=which(y);
23         tr[y][nx]=tr[x][!nx]; fa[tr[x][!nx]]=y;
24         fa[y]=x; tr[x][!nx]=y; fa[x]=z;
25         if (z) tr[z][ny]=x; update(y); update(x);
26     }
27     void splay(int x, int aim)
28     {
29         while (fa[x]!=aim)
30         {
31             int y=fa[x],z=fa[y];
32             if (z==aim) rotate(x);
33             else if (which(x)==which(y)) rotate(y),rotate(x);
34             else rotate(x),rotate(x);
35         }
36         if (!aim) root=x; update(x);
37     }
38     void insert(int val)
39     {
40         int x=root;
41         for (;;)
42         {
43             if (val<v[x]) 
44                 if (!ls) {ls=val,fa[ls]=x,size[ls]=1; splay(ls,0); break;} else x=ls;
45             else if (!rs) {rs=val,fa[rs]=x,size[rs]=1; splay(rs,0); break;} else x=rs;
46         }
47     }
48     void pushdown(int x)
49     {
50         if (rev[x])
51         {
52             swap(ls,rs);
53             rev[ls]^=1; rev[rs]^=1;
54             rev[x]=0;
55         }
56     }
57     int find(int x, int rank)
58     {
59         pushdown(x);
60         if (size[ls]+1==rank) return x;
61         else if (size[ls]>=rank) return find(ls,rank);
62         else return find(rs,rank-size[ls]-1);
63     }
64     void rever(int l, int r)
65     {
66         int x=find(root,l);int y=find(root,r+2);
67         splay(x,0); splay(y,x);
68         rev[tr[y][0]]^=1;
69     }
70 }T;
71 int n,m;
72 int main()
73 {
74     n=ra(); m=ra();
75     for (int i=1; i<=n+2; i++) T.insert(i);
76     for (int i=1; i<=m; i++)
77     {
78         int x=ra(),y=ra();
79         T.rever(x,y);
80     }
81     for (int i=2; i<=n+1; i++)
82         printf("%d ",T.find(T.root,i)-1);
83 }

 

转载于:https://www.cnblogs.com/ccd2333/p/6392040.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值