【非原创】codeforces 1070C Cloud Computing 【线段树&树状数组】
题目:戳这里
学习博客:戳这里
题意:有很多个活动,每个活动有持续天数,每个活动会在每天提供C个CPU每个CPU价格为P,问需要工作N天,每天需要K个CPU的最少花费。
解题思路:遍历每一天,维护当前天K个cpu的最小花费。具体方法是维护两个线段树(树状数组也可以),维护每一天可以使用的cpu数和价格*cpu数的前缀和。注意数组下标是价格(1e6的数组。
(不明白的话可以看代码,代码思路很清晰
附学习博客的代码:
1 #include <iostream>
2
3 #include <algorithm>
4
5 #include <string.h>
6
7 #include <vector>
8
9 #include <memory.h>
10
11 #include <bitset>
12
13 #include <map>
14
15 #include <deque>
16
17 #include <math.h>
18
19 #include <stdio.h>
20
21 using namespace std;
22
23 typedef long long int ll;
24
25 const int MAXN = 1000005;
26
27
28
29 ll num[MAXN<<2];
30
31 ll sum[MAXN<<2];
32
33 int N;
34
35 void pushup(int rt){
36
37 num[rt]=num[rt<<1]+num[rt<<1|1];
38
39 sum[rt]=sum[rt<<1]+sum[rt<<1|1];
40
41 }
42
43
44
45 void update(int P,int C,int l,int r,int rt){
46
47 if(l==r){
48
49 num[rt]+=C;
50
51 sum[rt]+=1ll*P*C;
52
53 return;
54
55 }
56
57
58
59 int m=(l+r)/2;
60
61
62
63 if(P<=m)
64
65 update(P,C,l,m,rt<<1);
66
67 else
68
69 update(P,C,m+1,r,rt<<1|1);
70
71 pushup(rt);
72
73 }
74
75
76
77 ll query(int K,int l,int r,int rt){
78
79
80
81 if(l==r){
82
83 //不到K个
84
85 if(l==MAXN){
86
87 return 0;
88
89 }
90
91 if(K>0)
92
93 {
94
95 return 1ll*K*l;
96
97 }
98
99 else
100
101 return 0;
102
103 }
104
105 int m=(l+r)/2;
106
107 if(num[rt<<1]>=K){
108
109 return query(K,l,m,rt<<1);
110
111 }
112
113 else{
114
115 return sum[rt<<1]+query(K-num[rt<<1],m+1,r,rt<<1|1);
116
117 }
118
119 }
120
121
122
123 vector<pair<int,int> > C[MAXN];//第i天加入的活动
124
125 vector<pair<int,int> > O[MAXN];//第i天结束的活动
126
127
128
129 int main()
130
131 {
132
133 int K,M;
134
135 scanf("%d%d%d",&N,&K,&M);
136
137
138
139 int l,r,c,p;
140
141 for(int i=0;i<M;i++){
142
143 scanf("%d%d%d%d",&l,&r,&c,&p);
144
145 C[l].push_back(make_pair(p,c));//加入的活动
146
147 O[r].push_back(make_pair(p,c));//退出的活动
148
149 }
150
151
152
153 ll ans=0;
154
155 for(int i=1;i<=N;i++){
156
157 //新活动加入
158
159 for(int j=0;j<C[i].size();j++)
160
161 update(C[i][j].first,C[i][j].second,1,MAXN,1);
162
163 ans+=query(K,1,MAXN,1);
164
165 //活动结束
166
167 for(int j=0;j<O[i].size();j++)
168
169 update(O[i][j].first,-O[i][j].second,1,MAXN,1);
170
171 }
172
173 cout<<ans<<endl;
174
175
176
177 return 0;
178
179 }
【非原创】codeforces 1070C Cloud Computing 【线段树&树状数组】的更多相关文章
- codeforces 1017C - Cloud Computing 权值线段树 差分 贪心
https://codeforces.com/problemset/problem/1070/C 题意: 有很多活动,每个活动可以在天数为$[l,r]$时,提供$C$个价格为$P$的商品 现在从第一天 ...
- CodeForces -163E :e-Government (AC自动机+DFS序+树状数组)
The best programmers of Embezzland compete to develop a part of the project called "e-Governmen ...
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem E (Codeforces 831E) - 线段树 - 树状数组
Vasily has a deck of cards consisting of n cards. There is an integer on each of the cards, this int ...
- [bzoj3196][Tyvj1730]二逼平衡树_树套树_位置线段树套非旋转Treap/树状数组套主席树/权值线段树套位置线段树
二逼平衡树 bzoj-3196 Tyvj-1730 题目大意:请写出一个维护序列的数据结构支持:查询给定权值排名:查询区间k小值:单点修改:查询区间内定值前驱:查询区间内定值后继. 注释:$1\le ...
- Codeforces Round #225 (Div. 1) C. Propagating tree dfs序+ 树状数组或线段树
C. Propagating tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/383/p ...
- Buses and People CodeForces 160E 三维偏序+线段树
Buses and People CodeForces 160E 三维偏序+线段树 题意 给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a ...
- CodeForces 877E DFS序+线段树
CodeForces 877E DFS序+线段树 题意 就是树上有n个点,然后每个点都有一盏灯,给出初始的状态,1表示亮,0表示不亮,然后有两种操作,第一种是get x,表示你需要输出x的子树和x本身 ...
- [Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路)
[Codeforces 1197E]Culture Code(线段树优化建图+DAG上最短路) 题面 有n个空心物品,每个物品有外部体积\(out_i\)和内部体积\(in_i\),如果\(in_i& ...
- [Codeforces 1199D]Welfare State(线段树)
[Codeforces 1199D]Welfare State(线段树) 题面 给出一个长度为n的序列,有q次操作,操作有2种 1.单点修改,把\(a_x\)修改成y 2.区间修改,把序列中值< ...
随机推荐
- 如何创建一个 PostgreSQL 数据库?
PostgreSQL 官网截图 PostgreSQL 是什么? PostgreSQL 是一个功能非常强大的,历史悠久,开源的关系数据库.PostgreSQL支持大部分的SQL标准并且提供了很多其他现代 ...
- Ubuntu源、Python虚拟环境及pip源配置
Ubuntu 命令行更改源 在修改source.list前,最好先备份一份 软件源的地址配置文件在 /etc/apt/sources.list 执行备份命令 sudo cp /etc/apt/sour ...
- Python干货:了解元组与列表的使用和区别
元组是 Python 对象的集合,跟列表十分相似.下面进行简单的对比. 列表与元组 1.python中的列表list是变量,而元组tuple是常量. 列表:是使用方括号[],元组:则是使用圆括号() ...
- 深度学习论文翻译解析(十七):MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
论文标题:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 论文作者:Andrew ...
- Vue基础之插值表达式的另一种用法!附加变量的监听!
Vue基础之插值表达式的另一种用法!附加变量的监听! 讲这个之前我们先回顾一下原来的用法! <body> <!-- Vue.js的应用可以分为两个重要的组成部分 一个是视图! 另一个 ...
- Python+Selenium+Unittest实现PO模式web自动化框架(7)
1.TestDatas目录的功能 TestDatas目录下存放的是测试数据,比如:登录功能的测试用例数据. # --^_^-- coding:utf-8 --^_^-- # @Remark:登录测试数 ...
- day132:2RenMJ:MJ需求文档&MJ游戏流程&Egret白鹭引擎安装&TypeScript简要介绍
目录 1.麻将产品需求文档 2.麻将游戏流程 3.Egret白鹭引擎 4.TypeScript简要了解 5.TypeScript快速入门 1.麻将产品需求文档 1.麻将术语 1.名词术语 牌⼦: 序数 ...
- Java面向对象(一)----初次见面
面向对象 面向过程:根据业务逻辑从上到下写代码 函数式编程:对一些功能的代码封装到函数中,日后无需重复编写,直接调用函数就可以了 面向对象:将所有的功能进行封装,面对的事封装了功能的实体(对象),即面 ...
- SELECT ... FOR UPDATE or SELECT ... FOR SHARE Locking Reads session
小结: 1.注意使用限制 Locking reads are only possible when autocommit is disabled (either by beginning transa ...
- Tensorflow-卷积神经网络CNN
卷积神经网络CNN 结构 池化操作 手写数字-卷积神经网络实现 import tensorflow as tf from tensorflow.examples.tutorials.mnist imp ...