题解 CF785E 【Anton and Permutation】】的更多相关文章

题目大意:有一串数为$1\sim n(n\leqslant2\times10^5)$,$m(m\leqslant5\times10^4)$次询问,每次问交换位置为$l,r$的两个数后数列中逆序对的个数. 题解:发现交换位置为$l,r$的数后,逆序对的变化只和区间$(l,r)$内的数与$s_l,s_r$的大小关系有关,设$S_i$表示区间$(l,r)$中比$s_i$小的数,$B_i$表示区间$(l,r)$中比$s_i$大的数,$ans'=ans+S_r-B_r-S_l+B_l$.设$len=r-l…
E. Anton and Permutation time limit per test 4 seconds memory limit per test 512 megabytes input standard input output standard output Anton likes permutations, especially he likes to permute their elements. Note that a permutation of n elements is a…
Portal Description 对一个长度为\(n(n\leq2\times10^5)\)的数列\(a\)进行\(m(m\leq5\times10^4)\)次操作,数列初始时为\(\{1,2,...,n\}\).每次操作交换数列中的两个数\(a_L\)和\(a_R\),并询问此时数列\(a\)中的逆序对数. Solution 交换\(a_L\)和\(a_R\)时,会影响逆序对数的只有下标在\((L,R)\)之间,数值在\(a_L\)和\(a_R\)之间的数(钦定\(L<R\)).设这样的数…
Anton and Permutation time limit per test 4 seconds memory limit per test 512 megabytes input standard input output standard output Anton likes permutations, especially he likes to permute their elements. Note that a permutation of n elements is a se…
Codeforces 785 E. Anton and Permutation 题目大意:给出n,q.n代表有一个元素从1到n的数组(对应索引1~n),q表示有q个查询.每次查询给出两个数l,r,要求将索引为l,r的两个数交换位置,并给出交换后数组中的逆序对数. 思路:此题用到了分块的思想,即将这组数分为bsz块,在每一块上建Fenwick树,对于每次查询,只需要处理l,r中间的块和l,r所在块受影响的部分.具体实现见代码及注释. #include<iostream> #include<…
考虑用分块解决这个题,一次交换对当前逆序对个数的影响是,加上两倍的在区间\([l+1,r-1]\)中比\(a_r\)小的元素个数,减去两倍的在区间\([l+1,r-1]\)中比\(a_l\)小的元素个数,再根据\(a_l\)和\(a_r\)的大小关系决定这两个位置对答案的影响. 可以用\(vector\)来维护每个块内元素有序,然后就可以支持询问了. \(code:\) #include<bits/stdc++.h> #define maxn 200010 #define lower(a,x)…
[题目链接] http://codeforces.com/contest/785/problem/E [题目大意] 一个1到n顺序排列的数列,每次选择两个位置的数进行交换,求交换后的数列的逆序对数 [题解] 我们将序列进行分块.每块维护一个权值树状数组表示各个数字的情况, 每次交换两个数之后我们计算前后贡献值进行加减,计算答案. [代码] #include <cstdio> #include <algorithm> using namespace std; const int N=…
[题目链接]:http://codeforces.com/problemset/problem/785/E [题意] 给你一个初始序列1..n顺序 然后每次让你交换任意两个位置上面的数字; 让你实时输出q个操作,每个操作过后整个序列逆序对的个数; [题解] 分块法; 分成根号n个块. 每个块按照数字升序排; 然后再用一个a数组具体记录每个位置上的数字; 找逆序对的方式如下: 对于交换l,r 查找l+1..r-1当中比a[l]小的数字,比a[l]大的数字; 查找l+1..r-1当中比a[r]小-比…
题目链接:http://codeforces.com/problemset/problem/785/E 其实可以CDQ分治... 我们只要用一个数据结构支持单点修改,区间查询比一个数大(小)的数字有多少个就可以了. 考虑分块,每段区间之内有排序或者二分查询比一个数大的树的个数的操作. 复杂度${O(qn \sqrt n log_{2}^{\sqrt n})}$ #include<iostream> #include<cstdio> #include<algorithm>…
1.题目描述 2.问题分析 可以使用递归的方法解决,参考了别人的答案才写出来的. 3.代码 vector<string> letterCasePermutation(string S) { vector<string> res ; recursion( S,res, ); return res; } void recursion(string & s , vector<string> &r ,int p){ if( p == s.size() ){ r.…
题意: 有一个\(1 \sim n\)的排列\(A\),有\(q\)个询问: 交换任意两个元素的位置,求交换之后排列的逆序数 分析: 像这种不太容易用线段树,树状数组维护的可以考虑分块 每\(\sqrt{n}\)个元素划分为一块,然后两端的块可以直接扫出逆序数的变化,中间的块可以用二分计算逆序数 在更新块的时候,可以二分查找要插入或删除的位置 每次询问的复杂度为\(O(\sqrt{n}log\sqrt{n})=O(\sqrt{n}logn)\) #include <cstdio> #inclu…
主席树算贡献l,r中交换位置,算出>=rank(h) 和 <=rank(h) a[l],a[r] 先不统计 a[l]比a[r]大的话交换后ans-1,a[l]比a[r]小的话交换后ans-1,ans+<r的,->r的 ans-<l的,+>l的,区间比k大的数量或者区间第k大等类似的可以用第二类主席树弄 #include <cstdio> #include <memory> #include <cstdlib> #include <…
A. Anton and Polyhedrons 直接统计+答案就可以了. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define maxn 1000 #define LL long long using namespace std; ]; int main() { int n; LL sum=; scanf("%d",&n);…
Anton likes permutations, especially he likes to permute their elements. Note that a permutation of n elements is a sequence of numbers {a1, a2, ..., an}, in which every number from 1 to n appears exactly once. One day Anton got a new permutation and…
昨晚玩游戏竟然不小心错过了CF..我是有多浪啊. 今天总算趁着下课时间补了,感觉最后两题还是挺有意思的,写个题解. D: 题目大意: 给出一个括号序列,问有多少个子序列 是k个'(' + k个')' 这样的形式.        n<=200000 解法: 对于每个'('的位置,计算以它为最右边的'('的合法子序列数. 假设它左边(包括它)有$l$个'(', 右边有 $r$个')' ,  如果子序列的长度2k, 那么 方案数有$\binom{l-1}{k-1} * \binom{r}{k}= \b…
好久没打CF了,打场div2练手.因为比较晚还没提前睡有点神志不清,E题打了莫名其妙的代码调了好久,最后结束后5分钟才发现哪里错了-- AC:ABCD Rank:60 A.Anton and Polyhedrons 题目大意:五种多面体,每种用一个英文单词表示,某人有n个多面体,分别告诉你这n个多面体是什么,求总共多少个面.(n<=200,000) 思路:普及培训,选择结构+循环结构. #include<cstdio> int main() { ;]; scanf("%d&qu…
题目链接:http://codeforces.com/contest/785 A. Anton and Polyhedrons time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Anton's favourite geometric figures are regular polyhedrons. Note that there…
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the permutations in order,We get the following sequence (ie, for n = 3): "123" "132" "213" "231" "312" "3…
[题解]CF359B Permutation 求一个长度为\(2n\)的序列,满足\(\Sigma |a_{2i}-a_{2i-1}|-|\Sigma a_{2i}-a_{2i-1}|=2k\) 这种带绝对值的题目套路就是把绝对值拆开.看看\(n=2\)时候的情况 \(\left[1,2,3,4\right]\) \(|2-1|+|4-3|-|2-1+4-3|=0\) \(swap(1,2) =>\) \(|1-2|+|4-3|-|1-2+4-3|=2\) 也就是交换一组产生\(2\)的贡献,直…
题解 CF734F [Anton and School] 传送门 这种将位运算和普通运算结合起来的题目要拆位来考虑,可以得到\(log_{2}(\)值域\()\)的算法,甚至将值域看成常数. 根据 \(a|b+a \& b=a+b\) 得到 \(b_i+c_i=\Sigma a_i+na_i\) 于是 \(a_i=\frac{b_i+c_i- \Sigma a_i}{n}\) 根据这个式子,直接得到\(a_i\),注意在除的时候判断整除以免非法情况出现. 此时,我们要判断\(b_i\)和\(c_…
题目来源 https://leetcode.com/problems/next-permutation/ Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers. If such arrangement is not possible, it must rearrange it as the lowest possible…
[题目描述] Given n and k, return the k-th permutation sequence. Notice:n will be between 1 and 9 inclusive. 给定n和k,求123..n组成的排列中的第k个排列. [注]1 ≤ n ≤ 9 [题目链接] www.lintcode.com/en/problem/permutation-sequence/ [题目解析] 这道题给了我们n还有k,在数列 1,2,3,... , n构建的全排列中,返回第k个…
本蒟蒻闲来无事刷刷水题 话说这道题,看楼下的大佬们基本都是用字符 ( char ) 来做的,那么我来介绍一下C++的优势: string ! string,也就是类型串,是C语言没有的,使用十分方便 我来介绍一下string的用法: 1.定义 string 字符串名; 2.输入 它有 2 种输入方式: ① getline\color{black}\text{getline}getline :使用方法: getline(cin,字符串名); ② cin\color{black}\text{cin}…
题面:https://www.cnblogs.com/Juve/articles/11631298.html permutation: 参考:https://www.cnblogs.com/clno1/p/10832579.html 因为原来的数组不好做于是我们想反过来数组,根据交换条件:值相邻且位置差大于等于k,那么在变换后的数组就变成了位置相邻且差值大于等于k.这样的话变换操作变成了,相邻的大于等于k的值临近交换,于是我们注意到因为现在只能临近交换的原因,两个差值小于k的数他们的相对位置不可…
// 昨天打了一场网络赛,表现特别不好,当然题目难度确实影响了发挥,但还是说明自己太菜了,以后还要多多刷题. 2018 CCPC 网络赛 I - Tree and Permutation 简单说明一下题意,给出一个1,2,3...N的排列,显然全部共有N!种排列,每种排列的数字代表树上的一个结点,设Pi是其中第i种排列的相邻数字表示的结点的距离之和,让我们求sum(Pi)(1<=i<=N!). 可以设dis(i, j)为树上任意两点间的最短距离,稍加分析一下容易得到所求答案为 (N-1)! *…
原题链接 题意简介 给定一个长度为 n 的排列 {1,2,3,...,n} .现有两种操作: 对某个区间 [l,r] 求和 将排列往后推 x 次 (按字典序) 其中 \(n,q \leq 2\times10^5 , x\leq 10^5\) . 思路分析 乍一看毫无思路. 因为排列变换是毫无疑问的暴力,变换后怎么维护区间和是一个非常玄妙的问题.好像没有什么特殊的维护技巧. 仔细观察数据范围:\(x\leq 10^5 , q\leq 2\times 10^5\) 这意味着 \(\sum x_i \…
题目大意:给出n和k,找到1..n这些数组成的有序全排列中的第k个. 首先,n的全排列可以分成n组,每一组由n-1个数组成. 例如  3的全排列,分成三组: 1 2 3  和 1 3 2 2 1 3  和 2 3 1 3 1 2  和 3 2 1 每一组的个数是(n-1)!,每一组的打头的都是i .第i组以i打头. 先求 x = (k-1) / (n-1)!  + 1 比如  n = 3, k = 4. x = 3/2 + 1 = 2,得到 第四个实际上第二组里面. y = (k-1)%(n-1…
题意:有一棵n个点的树,点之间用无向边相连.现把这棵树对应一个序列,这个序列任意两点的距离为这两点在树上的距离,显然,这样的序列有n!个,加入这是第i个序列,那么这个序列所提供的贡献值为:第一个点到其他所有点距离之和.求所有序列贡献值之和. 思路:假如第一个点是k,那么后面n-1个点共有(n - 1)!种排列,也就是说,第一个点是k那么这样的序列的贡献值为(n - 1)!*(k到其他点距离之和),显然最后答案应该是所有点之间的距离和的两倍 *(n - 1)!.问题转化为了求一棵树上所有点之间的距…
写这题时脑子比较混乱,重写了一遍wiki大佬的解法. 算法: According to Wikipedia, a man named Narayana Pandita presented the following simple algorithm to solve this problem in the 14th century. Find the largest index k such that nums[k] < nums[k + 1]. If no such index exists,…
原题链接 简要题意: 给定一个 \(1\) ~ \(n\) 的置换,将数组分为 \(k\) 个区间,使得每个区间的最大值之和最大.求这个值,和分区的方案数. 关键在于 \(1\) ~ \(n\) 的置换. 显然,你只要把从 \(n - k + 1\) 到 \(n\) 这一段,每个区间分一个(其余的随便分). 显然可以得出第一个答案: \[(n-k+1) + (n-k+1) + \cdots + (n-1) + n \] (很显然,你可以用等差数列求和,可是没这个必要,一会儿求第二个答案的时候,可…