Codeforces 911D. Inversion Counting (数学、思维)
题目链接: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 (数学、思维)的更多相关文章
- 程序设计中的数学思维函数总结(代码以C#为例)
最近以C#为例,学习了程序设计基础,其中涉及到一些数学思维,我们可以巧妙的将这些逻辑问题转换为代码,交给计算机运算. 现将经常会使用到的基础函数做一总结,供大家分享.自己备用. 1.判断一个数是否为奇 ...
- PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记
PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...
- Codeforces 954H Path Counting 【DP计数】*
Codeforces 954H Path Counting LINK 题目大意:给你一棵n层的树,第i层的每个节点有a[i]个儿子节点,然后问你树上的简单路径中长度在1~n*2-2之间的每个有多少条 ...
- UVa10025 The ? 1 ? 2 ? ... ? n = k problem 数学思维+规律
UVa10025 ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can set operator ...
- B. Tell Your World(几何数学 + 思维)
B. Tell Your World time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- codeforces 911D
D. Inversion Counting time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- 【Codeforces】CF 911 D. Inversion Counting(逆序对+思维)
题目 传送门:QWQ 分析 思维要求比较高. 首先我们要把原图的逆序对q算出来. 这个树状数组或归并排序都ok(树状数组不用离散化好评) 那么翻转$[l,r]$中的数怎么做呢? 暴力过不了,我试过了. ...
- Codeforces Round #272 (Div. 2) C. Dreamoon and Sums (数学 思维)
题目链接 这个题取模的时候挺坑的!!! 题意:div(x , b) / mod(x , b) = k( 1 <= k <= a).求x的和 分析: 我们知道mod(x % b)的取值范围为 ...
- Divisors of Two Integers CodeForces - 1108B (数学+思维)
Recently you have received two positive integer numbers xx and yy. You forgot them, but you remember ...
随机推荐
- 转: c#.net利用RNGCryptoServiceProvider产生任意范围强随机数的办法
//这样产生0 ~ 100的强随机数(含100) ; int rnd = int.MinValue; decimal _base = (decimal)long.MaxValue; ]; System ...
- 多线程应用-函数方式(thread)
多线程只能使用一颗CPU,无法发挥多核心的优势.计算密集型用python的多线程效果不明显的,I/O密集型才能看出效果,可以发挥多核优势. GIL是全局资源锁,所以,如果没有涉及到资源的调用,是不会体 ...
- 【matlab】 拉格朗日插值
第一个函数 "lagrange1.m" 输入:X Y 与点x0 输出:插值函数对应函数值 y0 function y = lagrange1(X,Y,x0) n = length ...
- 铁乐学python26_hashlib+configparser+logging模块
大部份内容摘自博客http://www.cnblogs.com/Eva-J/ hashlib模块算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢? ...
- 词组查询以及多值映射等SolrNet使用中的细节问题
转自:http://www.duxuan.cn/doc/6896594.html
- C#基础学习之事件的理解和应用
事件的使用和委托类似,也是分四步来实现:声明委托.定义事件.注册事件.调用事件 我们先看一下事件的定义 //定义委托 public delegate void PublishEventHandler( ...
- Spring实战 MethodInvokingJobDetailFactoryBean使用与分析
定义一个Job类 public class OffsetsQuartz { public void jobQuartz() { String[] clusterAliass = SystemConfi ...
- 为什么会有object这么一个根基类
先问一个问题,为什么需要有一个统一的基类:Object?甚至,我们在编程语言中也常常见到这种模式,比如Java中的object.C#的object,甚至一些纯对象的脚本语言(Ruby里连数字123都是 ...
- tomcat服务器宕机解决方案
报错信息: java.lang.Object.wait(Native Method) java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:1 ...
- java的@PostConstruct注解
javax.annotation 注释类型 PostConstruct @Documented @Retention(value=RUNTIME) @Target(value=METHOD) publ ...