A. AquaMoon and Strange Sort

叉人题

如果数字各不相同,只需要统计每个数参与构成的逆序对总数,如果是奇数一定最终朝左,偶数朝右。无意义的数字交换对方向是没有影响的

继续考虑相同数字带来的影响。逆序对考虑的交换次数是最小交换,是保守排序,相同数字的相对位置不变。把交换次数的序列按奇偶提取出来,比如001110 001100。每次操作交换两个数字然后把它翻转,那么只有对相同的相邻数进行操作才有意义。

模型转化为给一个01序列,每次选择两个相邻的相同数,把它们翻转,问最后能否化成全0序列。

100100也是可行的。100100->111111->000000

把序列想象成多个连续的01段拼接。偶数段是可以任意转化的,对答案不产生影响,能把左右直接相连。奇数段则不行,需要把它压成一个数。用栈来考虑这个问题,如果是偶数段,什么也不插入,如果是奇数段,会插入一个0/1,如果栈尾和新插入的元素相同,说明能合并,如果不同就推进栈尾。在最终的栈中,如果栈空或者只有一个0,则合法,其他情况我们处理不掉1,均不合法。

 1 #include <vector>
2 #include <cstdio>
3 #include <cstring>
4 #include <algorithm>
5 #define ll long long
6 using namespace std;
7 const int maxn=1e5, N1=maxn+5;
8
9 template <typename _T> void read(_T &ret)
10 {
11 ret=0; _T fh=1; char c=getchar();
12 while(c<'0'||c>'9'){ if(c=='-') fh=-1; c=getchar(); }
13 while(c>='0'&&c<='9'){ ret=ret*10+c-'0'; c=getchar(); }
14 ret=ret*fh;
15 }
16
17 int n,T,ma;
18 int a[N1],num[N1];
19 vector<int>to[N1];
20 int stk[N1],tp;
21
22 struct BIT{
23 int sum[N1];
24 void upd(int x,int w){ for(int i=x;i<=ma;i+=i&(-i)) sum[i]+=w; }
25 int query(int x){ int ans=0; for(int i=x;i;i-=i&(-i)) ans+=sum[i]; return ans; }
26 void clr(){ for(int i=0;i<=ma;i++) sum[i]=0; }
27 }s;
28
29 int main()
30 {
31 // freopen("a.in","r",stdin);
32 scanf("%d",&T);
33 while(T--){
34
35 scanf("%d",&n); ma=0;
36 for(int i=1;i<=n;i++) read(a[i]), ma=max(a[i],ma);
37 for(int i=1;i<=n;i++)
38 {
39 num[i]=s.query(ma)-s.query(a[i]);
40 s.upd(a[i],1);
41 }
42 s.clr();
43 for(int i=n;i>=1;i--)
44 {
45 num[i]+=s.query(a[i]-1);
46 s.upd(a[i],1);
47 to[a[i]].push_back(num[i]&1);
48 }
49 s.clr();
50 int fl=1;
51 for(int k=1;k<=ma;k++)
52 {
53 tp=0;
54 for(int i=0,j;i<to[k].size();)
55 {
56 for(j=i;j<to[k].size() && to[k][j]==to[k][i];j++);
57 if((j-i)&1)
58 {
59 if(!tp) stk[++tp]=to[k][i];
60 else if(stk[tp]==to[k][i]) tp--;
61 else stk[++tp]=to[k][i];
62 }
63 i=j;
64 }
65 if(tp>1||(tp==1&&stk[tp]==1)) fl=0;
66 to[k].clear(); tp=0;
67 }
68 puts(fl?"YES":"NO");
69
70 }
71 return 0;
72 }

CF1545X Codeforces Round #732的更多相关文章

  1. Codeforces Round #732 (Div. 2)【ABCD】

    比赛链接:https://codeforces.com/contest/1546 A. AquaMoon and Two Arrays 题意 给出两个大小为 \(n\) 的数组 \(a, b\) ,每 ...

  2. Codeforces Round #732 (Div.1) 题解

    实在是打击人信心的一场比赛啊--一不注意就掉了 50+ 分,rating 没了啊/ll/dk/wq/kk A Weak pretest!!!!!11 /fn/fn/fn 一个很显然的注意点是在交换前后 ...

  3. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  4. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  5. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  6. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  7. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  8. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  9. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

随机推荐

  1. Solution -「LOCAL」舟游

    \(\mathcal{Description}\)   \(n\) 中卡牌,每种三张.对于一次 \(m\) 连抽,前 \(m-1\) 次抽到第 \(i\) 种的概率是 \(p_i\),第 \(m\) ...

  2. Linux编译安装升级bash5.1

    线上服务器有次做漏洞扫描时,被扫描出有bash漏洞.平时还是比较少遇到有bash的漏洞,好在编译升级比较简单. 测试环境系统:CentOS.Ubuntu 一.下载官网最新bash版本 bash官网下载 ...

  3. 基于containerd二进制部署k8s-v1.23.3

    文章目录 前言 k8s 组件 环境准备 创建目录 关闭防火墙 关闭selinux 关闭swap 开启内核模块 分发到所有节点 启用systemd自动加载模块服务 配置系统参数 分发到所有节点 加载系统 ...

  4. 使用.rmp文件在redhat7.9安装oracle19c

    19c开始,oracle提供了rmp安装包.感觉安装更方便一些了.记录一次测试环境安装. 1,创建交换空间 2,下载oracle 19c必要文件(oracle官网下载需要注册帐号,可以用迅雷下载后再上 ...

  5. 华为eNSP的防火墙(USG6000V)如何使用Web界面登入

    文章目录 华为eNSP的防火墙(USG6000V)如何使用Web界面登入 前言 一.使用步骤 1.导入USG6000V的镜像包 总结 前言 在华为的eNSP的模拟器上如何使用Web界面去管理与使用模拟 ...

  6. HTTP攻击与防范-跨网站脚本攻击

    实验目的 1.了解XSS -跨网站脚本攻击带来的危险性. 2.掌握XSS -跨网站脚本攻击的原理与方法 3.掌握防范攻击的方法 实验原理 跨网站脚本攻击之所以会发生,是因为网站的Web应用程序对用户的 ...

  7. iOS 通知扩展插件

    iOS 通知扩展插件 目录 iOS 通知扩展插件 Notification Service Extension 新建一个target 代码实现 注意事项 UINotificationConentExt ...

  8. 前端提升生产力系列三(vant3 vue3 移动端H5下拉刷新,上拉加载组件的封装)

    | 在日常的移动端开发中,经常会遇到列表的展示,以及数据量变多的情况下还会有上拉和下拉的操作.进入新公司后发现移动端好多列表,但是在看代码的时候发现,每个列表都是单独的代码,没有任何的封装,都是通过v ...

  9. 华为HCIP实验--OSPF单区域

    场景:你是公司的网络管理员.现在公司的网络中有三台ARG3路由器,通过以太网实现相互的连通.在以太网这样的广播式多路访问网络上,可能存在安全隐患,所有你选择采用OSPF区域认证的方法来避免恶意的路由攻 ...

  10. 【C# .Net GC】清除非托管类型(Finalize终结器、dispose模式以及safeHandler)

    总结 1.一般要获取一个内核对象的引用,最好用SafeHandle来引用它,这个类可以帮你管理引用计数,而且用它引用内核对象,代码更健壮 2.托管中生成并引用非托管,一但非托管和托管中的引用断开(托管 ...