题目链接:Inversion Counting

题意:

   定义数列{ai|i=1,2,...,n}的逆序对如下:对于所有的1≤j<i≤n,若ai<aj,则<i,j>为一个逆序对。于是,对于一个数列a[1..n],给定m次操作。对于每一次操作,给定l,r(1≤l<r≤n),将序列a[l..r]倒置。求倒置后的逆序对的数量的奇偶性。

题解:

  假设现在我们有一个序列并翻转这个序列[l,r]区间里面的数。假设某个数的k值是指在这个值后面小于这个数的数的个数,其实我们可以发现对于[1,l-1]区间中所有的数的k值并没有变化,同样的对于[r+1,n]区间中的所有数的k值也没有变化。那么我们只用考虑[l,r]区间内k值的变化,对于[l,r]中的某个数x,那么x的k值等于[x,r] + [r+1,n]区间小于x的数的个数,那么后一个区间[r+1,n]的影响同样不变,那现在我们只用只用考虑[x,r]区间对x的k值的影响了,假设没有翻转前[l,r]区间k值为a,则翻转后k值为(r-l+1)*(r-l)/2 - a(可以自己验证一下~)。所以整个序列k值相当于从 k 变到了 (r-l+1)×(r-l)/2 - a,差就为(r-l+1)×(r-l)/2 - 2×a。因为2×a是偶数,对奇偶性没有影响,所以我们只用判断(r-l+1)×(r-l)/2的奇偶性,如果为奇数就会改变整个序列的k值数量的奇偶性,偶数则不变。

 #include<bits/stdc++.h>
using namespace std;
const int MAX_N = 3e3+;
int res[MAX_N][MAX_N];
int vec[MAX_N];
int main()
{
int N,M,T;
while(cin>>N)
{
memset(res,,sizeof(res));
for(int i=;i<=N;i++)
{
scanf("%d",&vec[i]);
}
int sum = ;
for(int i=;i<N;i++)
{
for(int j=i+;j<=N;j++)
{
if(vec[j] < vec[i]) sum++;
}
}
int flag = ;
if(sum%) flag = ;
else flag = ;
cin>>M;
for(int i=;i<M;i++)
{
int l,r;
scanf("%d%d",&l,&r);
int x = r-l+;
int t = (x*(x-)/)%;
flag ^=t;
if(flag) cout<<"odd"<<endl;
else cout<<"even"<<endl;
} }
return ;
}

Codeforces 911D. Inversion Counting (数学、思维)的更多相关文章

  1. 程序设计中的数学思维函数总结(代码以C#为例)

    最近以C#为例,学习了程序设计基础,其中涉及到一些数学思维,我们可以巧妙的将这些逻辑问题转换为代码,交给计算机运算. 现将经常会使用到的基础函数做一总结,供大家分享.自己备用. 1.判断一个数是否为奇 ...

  2. PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记

    PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...

  3. Codeforces 954H Path Counting 【DP计数】*

    Codeforces 954H Path Counting LINK 题目大意:给你一棵n层的树,第i层的每个节点有a[i]个儿子节点,然后问你树上的简单路径中长度在1~n*2-2之间的每个有多少条 ...

  4. UVa10025 The ? 1 ? 2 ? ... ? n = k problem 数学思维+规律

    UVa10025 ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can set operator ...

  5. B. Tell Your World(几何数学 + 思维)

    B. Tell Your World time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  6. codeforces 911D

    D. Inversion Counting time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  7. 【Codeforces】CF 911 D. Inversion Counting(逆序对+思维)

    题目 传送门:QWQ 分析 思维要求比较高. 首先我们要把原图的逆序对q算出来. 这个树状数组或归并排序都ok(树状数组不用离散化好评) 那么翻转$[l,r]$中的数怎么做呢? 暴力过不了,我试过了. ...

  8. Codeforces Round #272 (Div. 2) C. Dreamoon and Sums (数学 思维)

    题目链接 这个题取模的时候挺坑的!!! 题意:div(x , b) / mod(x , b) = k( 1 <= k <= a).求x的和 分析: 我们知道mod(x % b)的取值范围为 ...

  9. Divisors of Two Integers CodeForces - 1108B (数学+思维)

    Recently you have received two positive integer numbers xx and yy. You forgot them, but you remember ...

随机推荐

  1. [翻译] ZFDragableModalTransition

    ZFDragableModalTransition Usage - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender ...

  2. 使用CocoaPods

    使用CocoaPods 1. 安装CocoaPods 有时候,默认的 https://rubygems.org/ 访问不了,你需要先执行以下命令移除掉sources gem sources -r ht ...

  3. Office 365 Pass-through身份验证及Seamless Single Sign-On

    Hello 小伙伴们, 这篇文章将视点聚焦在传递身份验证(Pass-through Authentication)上,将分享如何安装,配置和测试Azure Active Directory(Azure ...

  4. TreeMap:是基于红黑树的Map接口的实现

    > TreeMap:是基于红黑树的Map接口的实现. 红黑树:平衡二叉树 取出时,可以有三种方式:前序遍历,中序遍历,后序遍历 >排序: A 自然排序  --TreeMap无参构造 Tre ...

  5. Ubuntu 14.04 修改时区

    执行下面命令,并按照提示选择"Asia/Shanghai": sudo dpkg-reconfigure tzdata 正常执行结果为: Current default time ...

  6. 「GXOI / GZOI2019」与或和

    题目 广西和贵州的省选?好像很神仙的样子啊 之后发现这是一道水题 我们显然应该拆位考虑 显然我们应该对于每一位都拆一下看看这一位是\(0/1\) 显然我们如果找到一个全是\(1\)的矩阵,那么这一位的 ...

  7. [JSOI2016]扭动的回文串

    题目 非常板子了 看到求什么最长的回文,我们就想到枚举回文中心的方法 首先对于这个回文串只包含在一个串内的情况,我们随便一搞就可以了,大概\(Manacher\)一下就没有了 对于那种扭动的回文串,我 ...

  8. Day9 JSP

    JSP概述 JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP实际上就是Servlet. jsp = html + ...

  9. [IDE123] Intellij Idea 快捷键

    Ctrl+Shift+N,可以快速打开文件 Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Sh ...

  10. HashMap实现原理及源码分析之JDK7

    攻克集合第一关!! 转载 http://www.cnblogs.com/chengxiao/ 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如m ...