CF1995E Long Inversions(贪心 + 差分)】的更多相关文章

首先O(n^3)的贪心很好想,就是枚举k然后从前往后扫,扫到反就翻转区间 然后考虑优化掉翻转区间维,就是搞成差分的形式,在翻转区间的尾部打上标记,再用一个变量维护当前的翻转次数,加到当前状态上来判断是否需要翻转即可 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=5005; int n,a[N],b[N],ans=1e9,sum,f[N]; ch…
题意 https://vjudge.net/problem/CodeForces-1260D 有m个士兵,t秒,你要带尽可能多的士兵从0去n+1,且他们不能被杀死.路上有一些陷阱,陷阱d[i]会杀死能力比它小的士兵,陷阱位置在l[i],当你走到r[i]时可以拆除它.每次你可以向左或者向右移动.自己不会被陷阱杀死,可以先去把陷阱拆除再回来带兵. 思路 首先,贪心的选最强的一些士兵,即对士兵按能力从大到小排序,然后二分选的士兵数量x,如果花的时间小于等于t,那么就可以满足. 然后,考虑如何check…
题意 题目链接 Sol 这题就是一个很显然的贪心... 首先二分一个答案,然后check是否可行.check的时候我们需要对每个位置\(i\),维护出所有左端点在\(i\)左侧,右端点在\(i\)右侧的所有区间.最优策略一定是加右端点最远的. 然后就做完了, 复杂度\(O(nlogn)\) #include<bits/stdc++.h> #define Fin(x) freopen(#x".in", "r", stdin); #define LL lon…
C. Little Girl and Maximum Sum time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output The little girl loves the problems on array queries very much. One day she came across a rather well-known proble…
传送门 题目大意: n头牛,其中最高身高为h,给出r对关系(x,y) 表示x能看到y,当且仅当y>=x并且x和y中间的牛都比 他们矮的时候,求每头牛的最高身高. 题解:贪心+差分 将每头牛一开始都设为最高高度. 每一对关系(x,y),我们将[x+1,y-1]这个区间的身高变为 min(x,y)-1.这样是不对了.因为要维护[x+1,y-1]这个区间里 各个元素的大小关系,所以要将[x+1,y-1]的元素身高都减1. 一开始我是用线段树做的,后来发现题解用的差分. 没有询问的区间修改,差分做就好了…
题目链接 ​ 比赛时只想到了 \(\mathcal O(n^3)\) 的暴力做法,官方题解是 \(\mathcal O(n^2)\) ,并且是可以优化为 \(\mathcal O(n)\) 的(贪心+差分). ​ 贪心是比较明显的,我们需要从左到右依次考虑每张床的贡献,因为第 \(i\) 张床只能由 \([1,i-1]\) 的床跳过来,Pekora从第一张床开始跳一定是最优的.我们从左到右分析,用 \(b_i\) 记录在 \(i\) 床在之前被跳过的次数,如果 \(b_i>S_i-1\) ,说明…
题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个小时. 题目描述 该铁路经过N个城市,每个城市都有一个站.不过,由于各个城市之间不能协调好,于是乘车每经过两个相邻的城市之间(方向不限),必须单独购买这一小段的车票.第i段铁路连接了城市i和城市i+1(1<=i<N).如果搭乘的比较远,需要购买多张车票.第i段铁路购买纸质单程票需要Ai博艾元. 虽…
http://new.tyvj.cn/p/2065 我就不说我很sb的用线段树来维护值...... 本机自测的时候想了老半天没想出怎么维护点在所有区间被多少区间包含的方法.最后一小时才想出来线段树(果然太弱) .. 首先想到贪心,答案一定是某个区间的右端点...(这个很容易想也容易证,我就不说了.....) 然后按右端点排序 然后我维护了个左端点前缀和,将来枚举每一个右端点的时候所得到的答案就是sum[n]-sum[i]-he+ge*a[i].r he表示包含右端点的所有区间的左端点之和,ge表…
Integer Intervals Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 12192   Accepted: 5145 Description An integer interval [a,b], a < b, is a set of all consecutive integers beginning with a and ending with b. Write a program that: finds t…
P1986 元旦晚会 每个人可能属于不同的声部,每个声部最少要有c[i]个人发声: 求最少需要多少话筒: 首先贪心,将所有声部的区间按照右端点大小排序,如果右端点相同,左端点从小到大排序: 贪心每次选取靠近右端点的,这样每个区间相交的是最多的. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; struct node { int l,r,c; }a[maxn]; b…