Codeforces 1400E Clear the Multiset(贪心 + 分治)
发布日期:2021-05-08 21:58:46 浏览次数:14 分类:精选文章

本文共 1695 字,大约阅读时间需要 5 分钟。


在这里插入图片描述


#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
// #define mid ((l + r) >> 1) #define Lson rt << 1, l , mid#define Rson rt << 1|1, mid + 1, r#define ms(a,al) memset(a,al,sizeof(a))#define log2(a) log(a)/log(2)#define _for(i,a,b) for( int i = (a); i < (b); ++i)#define _rep(i,a,b) for( int i = (a); i <= (b); ++i)#define for_(i,a,b) for( int i = (a); i >= (b); -- i)#define rep_(i,a,b) for( int i = (a); i > (b); -- i)#define lowbit(x) ((-x) & x)#define IOS std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)#define INF 0x3f3f3f3f#define LLF 0x3f3f3f3f3f3f3f3f#define hash Hash#define next Next#define pb push_back#define f first#define s secondusing namespace std;const int N = 1e7 + 10, MOD = 1e9 + 7;const int maxn = 2e5;const long double eps = 1e-5;const int EPS = 500 * 500;typedef long long ll;typedef unsigned long long ull;typedef pair
PII;typedef pair
PLL;typedef pair
PDD;template
void read(T &x){ x = 0;char ch = getchar();ll f = 1; while(!isdigit(ch)){ if(ch == '-')f*=-1;ch=getchar();} while(isdigit(ch)){ x = x*10+ch-48;ch=getchar();}x*=f;}template
void read(T &first, Args& ... args) { read(first); read(args...);}int T, n;int a[N];inline int solve(int l, int r){ if(l > r) return 0; if(l == r) return (a[l] != 0); int maxv = 1e9 + 10; int mid; for(int i = l; i <= r; ++ i) if(a[i] < maxv){ maxv = a[i]; mid = i;} for(int i = l; i <= r; ++ i) a[i] -= maxv; return min(solve(l,mid - 1) + solve(mid + 1, r) + maxv,r - l + 1);}int main(){ int n; read(n); for(int i = 1; i <= n; ++ i) read(a[i]); printf("%d",solve(1,n)); return 0;}
上一篇:C 语言 数据结构 队列queue实现
下一篇:Language C ,C语言 数据结构 栈队列树图

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月12日 06时03分22秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章