Arrangement for Contests UVALive - 8519

2024-02-22 19:08

本文主要是介绍Arrangement for Contests UVALive - 8519,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击打开链接

贪心的思想 线段树操作

每次取区间最小值 然后拿掉这个最小值 并不影响区间内非最小值的匹配

#include <bits/stdc++.h>
using namespace std;
#define N 0x3f3f3f3fstruct node1
{int l;int r;int minn;int pos;int laz;
};struct node2
{int minn;int pos;
};node1 tree[400010];
int n,p;void pushup(int cur)
{if(tree[2*cur].minn<tree[2*cur+1].minn){tree[cur].minn=tree[2*cur].minn;tree[cur].pos=tree[2*cur].pos;}else{tree[cur].minn=tree[2*cur+1].minn;tree[cur].pos=tree[2*cur+1].pos;}return;
}void pushdown(int cur)
{if(tree[cur].laz!=0){tree[2*cur].minn-=tree[cur].laz;tree[2*cur].laz+=tree[cur].laz;tree[2*cur+1].minn-=tree[cur].laz;tree[2*cur+1].laz+=tree[cur].laz;tree[cur].laz=0;}return;
}void build(int l,int r,int cur)
{int m;tree[cur].l=l;tree[cur].r=r;tree[cur].minn=N;tree[cur].pos=-1;tree[cur].laz=0;if(l==r){scanf("%d",&tree[cur].minn);tree[cur].pos=l;return;}m=(l+r)/2;build(l,m,2*cur);build(m+1,r,2*cur+1);pushup(cur);return;
}node2 query(int pl,int pr,int cur)
{node2 res,tem;if(pl<=tree[cur].l&&tree[cur].r<=pr){res.minn=tree[cur].minn;res.pos=tree[cur].pos;return res;}res.minn=N,res.pos=-1;if(pl<=tree[2*cur].r){tem=query(pl,pr,2*cur);if(res.minn>tem.minn) res=tem;}if(pr>=tree[2*cur+1].l){tem=query(pl,pr,2*cur+1);if(res.minn>tem.minn) res=tem;}return res;
}void update(int pl,int pr,int val,int cur)
{if(pl<=tree[cur].l&&tree[cur].r<=pr){tree[cur].minn-=val;tree[cur].laz+=val;return;}pushdown(cur);if(pl<=tree[2*cur].r) update(pl,pr,val,2*cur);if(pr>=tree[2*cur+1].l) update(pl,pr,val,2*cur+1);pushup(cur);return;
}int main()
{node2 tem;int t,k,ans;scanf("%d",&t);while(t--){scanf("%d%d",&n,&k);build(1,n,1);ans=0;p=1;while(p+k-1<=n){tem=query(p,p+k-1,1);ans+=tem.minn;update(p,p+k-1,tem.minn,1);p=tem.pos+1;}printf("%d\n",ans);}return 0;
}

 

这篇关于Arrangement for Contests UVALive - 8519的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/736210

相关文章

CSU 1623 Inspectors(二分图最大权匹配 KM算法)(UVAlive 6879)

题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1623 选用一些边 覆盖所有的点 使得这些边的权值和最小 比赛时的想法是用一般图最大权匹配 样例也过了 但是提交总是WA 看kuangbin模版中写的是点的个数必须是偶数。。是不是有可能是这个原因 改用二分图最大权匹配之后就过了。。。。 #include <cstdio>

UVALive 6493 - Round Robin

题目链接:题目链接 就是初学编程的经典例子: N个小孩围成一个圈,给出一个数T,每次数到一个小孩,该小孩就得一分; 数到T的小孩退出。。。 但这里不同的是结束条件不再是只剩最后一个小孩,而是当剩余所有小孩的分数都相同时结束,并输出剩余的小孩数,和他们的得分 组队做题,我在这道题上坑了很久。。。 原因不是我不知道怎么做,而是想着优化模拟,比如N=5,T=17时,第一次可以判断每个小孩肯定

UVALive 6499 - sort me

题目是PDF文档格式的,所以直接贴题目链接吧: 题目链接 一般我们对字符串排序是根据ABC……XYZ的字母序进行排序,现在题目给出新的字母序,和待排序的字符串;         要求根据这些新的字母序题意是给出新的排序后的字符串 我想一般人的想法肯定是类比ABC……XYZ序列,再排序吧 我的想法就是为每一个待排序的字符串关联一个字符串,在这个关联字符串中保存当前字符串对应的ABC……XYZ序

【UVAlive】康托展开的思想

题目链接:点击打开链接 题目大意:就是给你一个n 求0~n之间的数 的k-进制和(-k)进制相同的数目 题目分析:要是的k和(-k)进制的数相同,那么就是在转化为k(-k)进制之后,在奇数位上 为全零。                     对于n在转化为长度为len的k进制数后 从最高位开始“递归”看                    即康托展开的思想。 #inclu

UVALive 4513 Stammering Aliens (hash+二分 or 后缀数组)

大白书上的一道例题,后缀数组的模板题吧,今天想练练hash,结果就wa+Tle了一脸。 还真没见过不卡自然取模,而卡自行取模的题,今天算是见到了。。取了好几个x,还是发生了碰撞?! 题意: 让你根据所给字符串,找出至少出现m次的最长字符串,输出最长的长度和起始位置的最大值。 思路: 字符串hash+二分。(等学会了后缀数组再来套下模板) 二分len,然后判断长度是否合法。 判断

UVALive - 2191 Potentiometers

题意:S操作将x改为y,M操作求[x,y]的和 思路:稍加改动一下树状数组就行了,当然线段树也可以 #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 400005;int n,t[MAXN];int lowbi

UVALive - 3942 Remember the Word (Trie)

题意:给你一个有S个不同单词组成的字典和一个长字符串,把这个字符串分解成若干个单词的连接,有多少种方法 思路:转化为Trie树的形式储存,用d(i)表示字符从i开始的字符串的分解方案,每次搜索到一个单词末的时候就可以累加了 #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>const

UVALive - 3644 X-Plosives

题意:每个化合物都是有两种元素组成的,如果车上存在k个简单化合物时,如果它和已装车的化合物形成易燃物的话,你就应该拒绝装车,否则装车,输出没有装车的个数 思路:简单的并查集应用 #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const in

UVALive - 3135 Argus

题意:有一系列的事件,它每Period秒钟就会产生编号为qNum的事件,你的任务是模拟出前k个事件,如果多个事件同时发生,先处理qNum小的事件 思路:用优先队列模拟 #include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace s

uvalive 2088 - Entropy(huffman编码)

题目连接:2088 - Entropy 题目大意:给出一个字符串, 包括A~Z和_, 现在要根据字符出现的频率为他们进行编码,要求编码后字节最小, 然后输出字符均为8字节表示时的总字节数, 以及最小的编码方式所需的总字节数,并输出两者的比率, 保留一位小数。 解题思路:huffman编码。 #include <stdio.h>#include <string.h>#