luogu 1484\1792 种树 奇怪的贪心可反悔
1484 种树 此版本是线性的,那么根据链表维护即可;
构建新点,点的左右分别是原整个区间的前驱及后继,再正常维护即可
注意两个版本的维护有所不同
第二个版本的维护直接将左右两点删除
1792 种树2 此版本是环
1484
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=;
struct node{
ll v;int id;
bool operator <(node a)const{
return v<a.v;}};
inline ll read(){
ll x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;}
ll a[N],ans;
int l[N],r[N],vis[N];
priority_queue<node> q;
int n,k;
int main(){
n=read();k=read();
for(int i=;i<=n;i++){
a[i]=read();
q.push((node){a[i],i});
l[i]=i-;r[i]=i+;
}int len=n;
for(int i=;i<=k;i++){
while(!q.empty()&&vis[q.top().id]) q.pop();
if(q.empty()||q.top().v<)
break;
node u=q.top();q.pop();
ans+=u.v;
vis[u.id]=vis[l[u.id]]=vis[r[u.id]]=;
a[++len]=a[l[u.id]]+a[r[u.id]]-a[u.id];
l[len]=l[l[u.id]],r[len]=r[r[u.id]];
r[l[len]]=len;l[r[len]]=len;
q.push((node){a[len],len});
}printf("%lld\n",ans);
return ;
}
1792
#include<bits/stdc++.h>
#define M 200050
#define rep(i,x,y) for(register int i=x;i<=y;i++)
using namespace std;
inline int read(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+(ch^);ch=getchar();}
return x*f;}
struct node{
int v,id;
friend bool operator < (node x,node y){
return x.v < y.v;}
};priority_queue<node> q;
int n,m,ans,chose,r[M],l[M],a[M];
bool vis[M];
void change(int x){
vis[x]=;
r[l[x]]=r[x];
l[r[x]]=l[x];
r[x]=;l[x]=;}
int main(){
n=read(),m=read();
rep(i,,n) a[i]=read();
if((n>>)<m){
printf("Error!\n");return ;}
rep(i,,n-) r[i]=i+;r[n]=;
rep(i,,n) l[i]=i-;l[]=n;
rep(i,,n) q.push((node){a[i],i});
rep(i,,m){
while(vis[q.top().id]) q.pop() ;
node u=q.top();q.pop();
ans+=u.v;
int ll=l[u.id],rr=r[u.id];
a[u.id]=a[ll]+a[rr]-a[u.id];
change(ll);change(rr);
q.push((node){a[u.id],u.id});
}printf("%d\n",ans);return ;
}
luogu 1484\1792 种树 奇怪的贪心可反悔的更多相关文章
- Luogu 1484 种树
Luogu 1792 算是双倍经验. 我们考虑对于一个点,我们要么选它,要么选它周围的两个点. 所以我们考虑用一个堆来维护,每次从堆顶取出最大值之后我们把它的权值记为:它左边的权值加上它右边的权值减去 ...
- [luogu]P2279 [HNOI2003]消防局的设立[贪心]
[luogu]P2279 [HNOI2003]消防局的设立 题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两 ...
- Luogu P1084 疫情控制 | 二分答案 贪心
题目链接 观察题目,答案明显具有单调性. 因为如果用$x$小时能够控制疫情,那么用$(x+1)$小时也一定能控制疫情. 由此想到二分答案,将问题转换为判断用$x$小时是否能控制疫情. 对于那些在$x$ ...
- luogu 1066 引水入城(bfs+贪心)
90分,有一个点TLE.... 首先可以证明一个东西,如果从上面一排的某个点bfs一次到最下面一排的饮水点不是一个区间的话,那么最后一定所有饮水点不会被覆盖完的. 证明考虑反证法. 所以从上面一排的每 ...
- 刷题向》关于一道奇怪的贪心(田忌赛马)BZOJ1034(NORMAL-)
这道题一看就是一道贪心,比较简单,但是越容易的题考试的时候越容易错... 没什么好说的,一遍SORT之后,直接强行田忌赛艇(滑稽脸)就好啦. 注意在对比大小的时候不仅要从前还要从后同时,不过这两个情况 ...
- luogu p3918[国家集训队]特技飞行 贪心
开始没看出来是贪心,一度以为是动态规划,还是太弱了呀-.. 不难分析出,两个相同的飞行动作之间夹一个相同的动作是多余的,所以就贪心一下,按Ci从大到小排序,依次加到左右两端点,知道加不了为止. 代码: ...
- [luogu] P4155 [SCOI2015]国旗计划(贪心)
P4155 [SCOI2015]国旗计划 题目描述 A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此 ...
- [luogu] P3294 [SCOI2016]背单词 (贪心)
题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,"我怎么样才能快点学完,然后去玩三国杀呢?".这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他 ...
- Luogu P2114_[NOI2014]起床困难综合症 贪心
思路:按位贪心. 提交:1次 题解: 可以先处理出对于全$0$串和全$1$串最后每一位的结果.(每一位 从 $0$ $or$ $1$ 变成 $0$ $or$ $1$) 对于每一位,若不能变成$1$,则 ...
随机推荐
- DNA Evolution CodeForces - 828E(树状数组)
题中有两种操作,第一种把某个位置的字母修改,第二种操作查询与[L, R]内与给出字符串循环起来以后对应位置的字母相同的个数.给出的字符串最大长度是10. 用一个四维树状数组表示 cnt[ATCG的编号 ...
- Annihilate(SA)
题目描述 黑暗之主的蜈蚣几乎可以毁灭一切,因此小正方形陷入了苦战…… 小正方形现在需要减弱黑暗之主的攻击. 一个黑暗之主的攻击可以用一个仅有小写字母的字符串表示. 现在黑暗之主向小正方形发动了若干攻击 ...
- CF1142C U2(计算几何,凸包)
题目大意:平面上有 $n$ 个点,第 $i$ 个点是 $(x_i,y_i)$.问有多少条抛物线(二次项系数为 $1$),经过这些点中不同的两个点,并且内部(不含边界)没有任何这些点.重合的抛物线只算一 ...
- 整车CAN网络介绍
CAN(Controller Area Network)控制器局域网络,CAN网络在早期的整车应用中以BCM(车身控制器)为控制中心,主要是车身零部件(雨刮/大灯/车窗…),智能硬件较少,所以早期的正 ...
- 定时自动从FTP服务器取数据脚本
环境需求:某些情况下经常需要向FTP服务器取文件,可以用定时任务执行简单脚本自动去取相应文件. 一般用法: ~]# ftp IP地址 端口 //ftp命令可以通过yum install ftp方式 ...
- linux(fedora) 第三课
树形打印所有进程名:pstree pstree | grep pstree -A2 -B2(查看pstree前后两行) NI的值[-20,20) nice(改变NI的值):改变程序优先级 nice - ...
- hdu 2609 How many(最小表示法)
Problem Description Give you n ( n < 10000) necklaces ,the length of necklace will not large than ...
- 从密码到token, 一个授权的故事 auth2.0
1 美好的旧时光 我经常怀念三十年前那美好的旧时光, 工作很轻松, 生活很悠闲. 上班的时候偶尔有些HTTP的请求发到我这里, 我简单的看一下, 取出相对应的html文档,图片,发回去就可以了, 然后 ...
- Java基本类型占用字节数(或 bit数)
背景:面试时候问到int类型占用几个字节,以及表示的大小,居然一脸懵逼,任何细节都不能放过. Java基本类型占用字节数(或 bit数) java是跨平台的语言,所以不论在什么系统中这些东西在内存中所 ...
- c语言: 修改参数的地址,及注意事项
如果需要在函数中修改参数的地址,首先参数肯定要是指针类型,同时传递的参数不能直接使用数组变量,至少需要先转换一下. 比如: char str[] = "123"; 不能直接传 ab ...