Gym 100960G (set+树状数组)】的更多相关文章

Let us call underpalindromity of array b of length k the minimal number of times one need to increment some elements bj by 1 so that the array b would become a palindrome, that is, b1 = bk, b2 = bk - 1, and so on. The array of length n, consisting of…
题意:给你一个序列,和标准序列连线,求交点数. 题解:就是求逆序对个数,用树状数组优化就行了.具体过程就是按照顺序往树状数组了插点(根据点的大小),因为第i大的点应该排在第i位,插进去的时候他前面本该是有i-1个点的,如果少了,那么一定就和这个元素构成了逆序对. #include<cstdio> #include<cmath> #include<vector> #include<map> #include<set> #include<alg…
A. Queries time limit per test 0.25 seconds memory limit per test 64 megabytes input standard input output standard output Mathematicians are interesting (sometimes, I would say, even crazy) people. For example, my friend, a mathematician, thinks tha…
bit扫描坐标套路题,注意有重复的点,莽WA了. const int maxn = 1e5 + 5; struct node { ll B, F, D; bool operator < (const node &rhs) const { if (B != rhs.B) return B > rhs.B; return F < rhs.F; } }a[maxn]; int n, tot; ll c[maxn], ans; struct BIT { ll t[maxn]; void…
Problem Youngling Tournament 题目大意 给一个序列a[i],每次操作可以更改一个数,每次询问 将序列排序后有多少个数a[i]>=sum[i-1]. n<=10^5,q<=5*10^4,a[i]<=10^12 解题分析 可以发现,在最优情况下,该序列长度最多为logn. 将询问离线后,用multiset来维护a[i],用树状数组来维护sum[i].树状数组所存下标为离散化后的a[i]. 每次查询时跳跃式地在set中查找. 时间复杂度 O((n+m)log(…
H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description The longest road of the Fairy Kingdom has n milestones. A long-established tradition defines a specific color for milestones in each region, with a…
题目链接:https://codeforces.com/gym/101908/problem/C 题意: 一块正方形披萨,有 $H$ 刀是横切的,$V$ 刀是竖切的,不存在大于等于三条直线交于一点.求最后切出多少片披萨. 题解: 横切和竖切分开考虑,如果横切的直线之间有 $ans_1$ 个交点,竖切的直线之间有 $ans_2$ 个交点,那么最后答案就是 $(H+1)(V+1)+ans_1+ans_2$. 这里求交点个数,是用的一种比较常见的树状数组优化的套路. 还有就是时限比较紧,用vector…
Flight Boarding Optimization 题目连接: http://codeforces.com/gym/100269/attachments Description Peter is an executive boarding manager in Byteland airport. His job is to optimize the boarding process. The planes in Byteland have s rows, numbered from 1 t…
原题链接 题意: 现在有n个人,s个位置和你可以划分长k个区域你可以把s个位置划分成k个区域,这样每个人坐下你的代价是该区域内,在你之前比你小的人的数量问你怎么划分这s个位置(当然,每个区域必须是连续的),才能使得总代价最小,输出代价. 分析:dp[i][j]表示第i个位置是第j个区域的结尾,dp[i][j]→dp[t][j+1]暴力转移.但是需要预处理每个范围里的代价值,需要树状数组维护. #include<bits/stdc++.h> using namespace std; ; ]; i…
题意:给你三个1~n的排列a,b,c,问你在 (i,j)(1<=i<=n,1<=j<=n,i≠j),有多少个有序实数对(i,j)满足在三个排列中,i都在j的前面. 暴力求的话是三维偏序,相对比较困难.但是我们可以用一些简单的方法. 设在a中i在j前面的有序实数对数为A,b中为B,c中为C.(其实显然A=B=C=n*(n-1)/2) 要求的即为A∩B∩C. 利用容斥原理A+B+C-A∩B-A∩C-B∩C+A∩B∩C=A∪B∪C ①,以及Ω-A∪B∪C=A∩B∩C ②可容易求得.(显然…