首页 > 其他分享 >AcWing 296. 清理班次2

AcWing 296. 清理班次2

时间:2022-10-25 11:35:33浏览次数:91  
标签:班次 min int tree const ans 296 return AcWing


题目链接:​​传送门​

洛谷上的​​P4644 [USACO05DEC]Cleaning Shifts​​​ 之前没发题解太高兴了
数据结构优化dp的例题
表示处理到处的最小花费
拿一个线段树维护最小值用来更新数组就好了

#include <bits/stdc++.h>
#define

using namespace std;
struct node {
int l, r, w;
friend bool operator < (const node a, const node b) {
return a.r < b.r;
}
}tree[A], e[A];
int n, l, r, f[A];
void build(int k, int l, int r) {
tree[k].l = l; tree[k].r = r;
if (l == r) {tree[k].w = f[l]; return;}
int m = (l + r) >> 1;
build(k << 1, l, m); build(k << 1 | 1, m + 1, r);
tree[k].w = min(tree[k << 1].w, tree[k << 1 | 1].w);
}
void change(int k, int pos, int val) {
if (tree[k].l == tree[k].r) {tree[k].w = val; return;}
int m = (tree[k].l + tree[k].r) >> 1;
if (pos <= m) change(k << 1, pos, val);
else change(k << 1 | 1, pos, val);
tree[k].w = min(tree[k << 1].w, tree[k << 1 | 1].w);
}
int ask(int k, int l, int r) {
if (tree[k].l >= l and tree[k].r <= r) return tree[k].w;
int m = (tree[k].l + tree[k].r) >> 1, ans = 0x3f3f3f3f;
if (l <= m) ans = min(ans, ask(k << 1, l, r));
if (r > m) ans = min(ans, ask(k << 1 | 1, l, r));
return ans;
}

int main(int argc, char const *argv[]) {
cin >> n >> l >> r; l++; r++;
if (n == 1 and l == 1 and r == 1) return puts("1"), 0;
for (int i = 1; i <= n; i++) scanf("%d%d%d", &e[i].l, &e[i].r, &e[i].w), e[i].l++, e[i].r++;
for (int i = l; i <= r; i++) f[i] = 0x3f3f3f3f;
f[l] = 0; sort(e + 1, e + n + 1); build(1, l, r);
for (int i = 1; i <= n; i++) {
f[e[i].r] = min(f[e[i].r], ask(1, e[i].l - 1, e[i].r) + e[i].w);
change(1, e[i].r, f[e[i].r]);
}
if (f[r] == 0x3f3f3f3f) puts("-1");
else cout << f[r] << endl;
}


标签:班次,min,int,tree,const,ans,296,return,AcWing
From: https://blog.51cto.com/lyle/5794334

相关文章

  • AcWing 281. 硬币
    题目链接:​​传送门​​只是询问一个可行性那么二进制拆分加一个bitset就行了#include<bits/stdc++.h>#defineusingnamespacestd;typedeflonglongll;intn,m,a[A],......
  • AcWing 1221 四平方和
    \(AcWing\)\(1221\).四平方和+自定义排序(重载<)+二分题目传送门一、题目大意四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多\(4\)个正整数的平方和......
  • AcWing80 骰子的点数(线性dp)
    #definepbpush_backclassSolution{public:vector<int>numberOfDice(intn){intf[15][100];//投i次,总和为j的投掷可能memset(f,0,sizeof(......
  • AcWing 895.最长上升子序列Ⅰ
    题目链接:http://www.acwing.com/problem/content/897/浅浅复习放AC代码1#include<bits/stdc++.h>2usingnamespacestd;34constintN=1010;5intn;......
  • AcWing 154.滑动窗口
    AcWing154.滑动窗口题目描述给定一个大小为n≤10^6的数组。有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到k个数字。每次滑动窗口......
  • 2022下半年 Acwing 第二篇:归并模板
    归并其实和快排比较类似,所以模板的记忆也大差不差。不能省懒!voidmerge_sort(intq[],intl,intr){if(l>=r)return;intmid=l+r>>1;merge_s......
  • ACWing 可达性统计
    ACWing可达性统计bitset可以说是一个多位二进制数,每八位占用一个字节,因为支持基本的位运算,所以可用于状态压缩,n位bitset执行一次位运算的时间复杂度可视为n/32.bitset<......
  • acwing 分组背包问题
    题面有N组物品和一个容量是V的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是vij,价值是wij,其中i是组号,j是组内编号。求解将哪些物品......
  • acwing 混合背包问题
    题面有N种物品和一个容量是V的背包。物品一共有三类:第一类物品只能用1次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多只能用si次(多重背包);每种体积是v......
  • acwing 二维费用的背包问题
    题面有N件物品和一个容量是V的背包,背包能承受的最大重量是M。每件物品只能用一次。体积是vi,重量是mi,价值是wi。求解将哪些物品装入背包,可使物品总体积不超过背......