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 种树 奇怪的贪心可反悔的更多相关文章

  1. Luogu 1484 种树

    Luogu 1792 算是双倍经验. 我们考虑对于一个点,我们要么选它,要么选它周围的两个点. 所以我们考虑用一个堆来维护,每次从堆顶取出最大值之后我们把它的权值记为:它左边的权值加上它右边的权值减去 ...

  2. [luogu]P2279 [HNOI2003]消防局的设立[贪心]

    [luogu]P2279 [HNOI2003]消防局的设立 题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两 ...

  3. Luogu P1084 疫情控制 | 二分答案 贪心

    题目链接 观察题目,答案明显具有单调性. 因为如果用$x$小时能够控制疫情,那么用$(x+1)$小时也一定能控制疫情. 由此想到二分答案,将问题转换为判断用$x$小时是否能控制疫情. 对于那些在$x$ ...

  4. luogu 1066 引水入城(bfs+贪心)

    90分,有一个点TLE.... 首先可以证明一个东西,如果从上面一排的某个点bfs一次到最下面一排的饮水点不是一个区间的话,那么最后一定所有饮水点不会被覆盖完的. 证明考虑反证法. 所以从上面一排的每 ...

  5. 刷题向》关于一道奇怪的贪心(田忌赛马)BZOJ1034(NORMAL-)

    这道题一看就是一道贪心,比较简单,但是越容易的题考试的时候越容易错... 没什么好说的,一遍SORT之后,直接强行田忌赛艇(滑稽脸)就好啦. 注意在对比大小的时候不仅要从前还要从后同时,不过这两个情况 ...

  6. luogu p3918[国家集训队]特技飞行 贪心

    开始没看出来是贪心,一度以为是动态规划,还是太弱了呀-.. 不难分析出,两个相同的飞行动作之间夹一个相同的动作是多余的,所以就贪心一下,按Ci从大到小排序,依次加到左右两端点,知道加不了为止. 代码: ...

  7. [luogu] P4155 [SCOI2015]国旗计划(贪心)

    P4155 [SCOI2015]国旗计划 题目描述 A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此 ...

  8. [luogu] P3294 [SCOI2016]背单词 (贪心)

    题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,"我怎么样才能快点学完,然后去玩三国杀呢?".这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他 ...

  9. Luogu P2114_[NOI2014]起床困难综合症 贪心

    思路:按位贪心. 提交:1次 题解: 可以先处理出对于全$0$串和全$1$串最后每一位的结果.(每一位 从 $0$ $or$ $1$ 变成 $0$ $or$ $1$) 对于每一位,若不能变成$1$,则 ...

随机推荐

  1. Equivalent Sets HDU - 3836 (Tarjan)

    题目说给出一些子集,如果A是B的子集,B是A的子集,那么A和B就是相等的,然后给出n个集合m个关系,m个关系表示u是v的子集,问你最小再添加多少个关系可以让这n个集合都是相等的 如果这n个几个都是互相 ...

  2. [WC2010]重建计划(分数规划+点分治+单调队列)

    题目大意:给定一棵树,求一条长度在L到R的一条路径,使得边权的平均值最大. 题解 树上路径最优化问题,不难想到点分治. 如果没有长度限制,我们可以套上01分数规划的模型,让所有边权减去mid,求一条路 ...

  3. poj1664放苹果(递归)

    题目链接:http://poj.org/problem?id=1664 放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  4. CF528D Fuzzy Search

    题意:给定k,只含有ACGT的字符串S和T,求T在S中出现了多少次. 字符匹配:如果S的[i - k, i + k]中有字符x,那么第i位可以匹配x. 解: 首先预处理:f[i][j]表示S的第i位能 ...

  5. python基础之文件表格读取

    实现功能:提取表格某一列的值. 所用库:xlrd 打开表格的函数 def open_excel_file(filename,sheet_num=0): xlsfile = filename book ...

  6. http请求流程

  7. Myeclipse启动报错:An error has occurred.See the log file

    出现这个问题是因为断电前myeclipse还在运行,日志报错如下: !ENTRY org.eclipse.osgi 4 0 2017-07-24 08:29:48.485 !MESSAGE An er ...

  8. UI动画的一些制作过程

    选中将要制作的3D物体,window----Animation----录制,选中的AddKey在之间的节点前点左键.

  9. CSS设置边框、符号、背景样式、链接属性

    一.CSS边框空白 padding-top:10px; /*上边框留空白*/ padding-right:10px; /*右边框留空白*/ padding-bottom:10px; /*下边框留空白* ...

  10. 写给IT技术爱好者的一封信

    写给IT技术爱好者的一封信>当前运维素质的分析<... ---------------------- 虽相貌平平,但勤学苦练,亦收获颇丰!如果你决定要成为一名IT从业者,你需要承受以下的东 ...