CF911D】的更多相关文章

题解: 简单的奇偶判断 代码: #include<bits/stdc++.h> using namespace std; ; int n,a[N],ans,m,p,q; int main() { scanf("%d",&n); ;i<=n;i++)scanf("%d",&a[i]); ;i<=n;i++) ;j<=n;j++) ; scanf("%d",&m); while (m--) { s…
题目大意: 给你一个数列,翻转其中一个区间,问每次翻转过后逆序对个数的奇偶性. 思路: 首先树状数组求出一开始的奇偶性,然后考虑每次翻转对答案的贡献. 对于整个区间,我们可以把翻转转化成若干次交换. 也就是交换(l,r),(l+1,r-1)... 总共有(r-l+1)/2次. 考虑每一次交换对答案的影响. 设当前交换的数为(a,b),那么对于a,改变的逆序对数为区间[a,b]大于a的数与小于a的数之差,对于b同理. 由于只要求奇偶性,那么加和减都差不多,所以我们可以都变成加法,那么a和b造成影响…
这是一道看似复杂其实也不简单的思维题. 其实思路很明显. 因为这道题的数据范围比较大,有1e5的询问,如果暴力(像我考场上那样打平衡树)的话可以做到$mnlogn$. 但那样也是稳T. 经过思考之后我们可以发现,这道题必定要使用m的解法,也就是对于每一个询问$O1$求解.(总不可能$mlogn$求解) 那么怎么$O1$呢? 众所周知,$O1$算法自古以来就和数学脱不开关系. 而本题中有哪些量可以扯上来搞一搞呢? 具体的值?肯定不现实. 那也就只剩下区间长度了. 针对区间长度进行考察之后,我们可以…