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. suse 12 二进制部署 Kubernetets 1.19.7 - 第01章 - 创建CA证书和kubectl集群管理命令

    文章目录 1.kubernetes集群部署 1.0.创建CA证书和秘钥 1.0.0.安装cfssl工具 1.0.1.创建根证书 1.0.2.创建证书签名请求文件 1.0.3.生成CA证书和秘钥 1.0 ...

  2. 关于c#知识的学到的新知识点

    开头:对这段时间学习的小知识点做一个整理.希望自己能理清思路.当然如果能帮到大家那就更好了. 1.判断写法 !True=false 思考:以前判断一直写if(布尔变量==false),今天看到这个,才 ...

  3. Gateway 简介

    概述 微服务可能分布在不同的主机上,这样有许多缺点:前端需要硬编码调用不同地址的微服务很麻烦:存在跨域访问的问题:微服务地址直接暴露是不安全的.还有所以需要为前端提供一个统一的访问入口.Gateway ...

  4. python-xlutils模块-修改excel

    前言 xlrd库用于读取excel文件中的数据,xlwt库用于将数据写入excel文件,修改用xlutils模块: xlutils库也仅仅是通过复制一个副本进行操作后保存一个新文件,像是xlrd库和x ...

  5. 如何制作报表?报表教程:适合你的热销车TOP25

    移动端看报表已成主流,Smartbi今天不是要告诉大家这是为什么,而是要实实在在的教大家,移动端报表应该怎么做,下面以Smartbi云报表的DEMO库中的"适合你的热销车TOP25" ...

  6. Linux修改权限命令chmod用法示例

    Linux公社 2020年10月13日 来自:Linux迷 网址:https://www.linuxmi.com/linux-chmod.html Linux中的Chmod命令用于更改或分配文件和目录 ...

  7. Python:matplotlib.cm 色表

    官网:Choosing Colormaps in Matplotlib - Matplotlib 3.5.0 documentation Colormap与matplotlib.cm 我们以等高区域函 ...

  8. JAVA的对象和封装及static与final的用法(详解)

    一:软件出现的目的 1:用计算机的语言描述现实世界 2:用计算机解决现实世界的问题 编程思维:  使用面向对象的思想(描述)面向对象的世界     (符合人类的思维习惯) 二:面向对象设计和开发程序的 ...

  9. 【Azure API 管理】使用APIM进行XML内容读取时遇见的诡异错误 Expression evaluation failed. Object reference not set to an instance of an object.

    问题描述 使用APIM,在 Inbound 中对请求的Body内容进行解析.客户端请求所传递的Request Body为XML格式,需要从Request Body中解析出多个(Element)节点值, ...

  10. LeetCode-046-全排列

    全排列 题目描述:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 .你可以 按任意顺序 返回答案. 示例说明请见LeetCode官网. 来源:力扣(LeetCode) 链接:http ...