ODT(区间覆盖问题)
解释:先留坑
题目:https://www.cometoj.com/contest/73/problem/D?problem_id=4120
#include<bits/stdc++.h>
using namespace std;
#define se set<aa>
#define it iterator
#define lowbit(x) (x&(-x))
typedef long long ll;
const int M=5e5+;
int n,m,q;
struct ope{
ll l,r,val;
}a[M];
struct quer{
ll l,r,id;
}b[M];
struct aa{
ll l,r,val,id;
};
set<aa>s;
bool cmp(quer x,quer y){
return x.r<y.r;
}
bool operator <(aa a,aa b) {
return a.r < b.r;
}
ll tree[M],ans[M];
void add(ll x,ll y)
{
if(x == ) return;
for(;x <= n; x += lowbit(x))
tree[x] += y;
} ll Sum(ll x) {
ll ans = ;
for(; x > ; x -= lowbit(x))
ans += tree[x];
return ans;
}
void split(se::it id,ll x){
ll l=id->l,r=id->r,val=id->val,_id=id->id;
if(x<l||x>=r)
return ;
s.erase(id);
s.insert((aa){l,x,val,_id});
s.insert((aa){x+,r,val,_id});
}
void Assign(ll l,ll r,ll val,ll id){
se::it x=s.lower_bound((aa){,l-,,});
split(x,l-);
se::it y=s.lower_bound((aa){,r,,});
split(y,r); x=s.lower_bound((aa){,l,,});
y=s.lower_bound((aa){,r+,,});
for(se::it i=x;i!=y;){
se::it j=i;
i++;
add(j->id,-((j->r)-(j->l)+)*(j->val));
s.erase(j);
}
s.insert((aa){l,r,val,id});
add(id,(r-l+)*val);
}
int main(){ scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=n;i++){
scanf("%lld%lld%lld",&a[i].l,&a[i].r,&a[i].val);
}
for(ll i=;i<=q;i++)
scanf("%lld%lld",&b[i].l,&b[i].r),b[i].id=i;
sort(b+,b++q,cmp);
s.insert((aa){,m,,});
for(int i=;i<=q;i++){
for(int j=b[i-].r+;j<=b[i].r;j++){
Assign(a[j].l,a[j].r,a[j].val,j);
}
ans[b[i].id]=Sum(n)-Sum(b[i].l-);
}
for(int i=;i<=q;i++)
printf("%lld\n",ans[i]);
return ;
}
ODT(区间覆盖问题)的更多相关文章
- HDU 4509 湫湫系列故事——减肥记II(线段树-区间覆盖 或者 暴力技巧)
http://acm.hdu.edu.cn/showproblem.php?pid=4509 题目大意: 中文意义,应该能懂. 解题思路: 因为题目给的时间是一天24小时,而且还有分钟.为了解题方便, ...
- UVa 10020 (最小区间覆盖) Minimal coverage
题意: 数轴上有n个闭区间[ai, bi],选择尽量少的区间覆盖一条指定线段[0, m] 算法: [start, end]为已经覆盖到的区间 这是一道贪心 把各个区间先按照左端点从小到大排序,更新st ...
- codeforces Gym 100187F F - Doomsday 区间覆盖贪心
F. Doomsday Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/F ...
- 【区间覆盖问题】uva 10020 - Minimal coverage
可以说是区间覆盖问题的例题... Note: 区间包含+排序扫描: 要求覆盖区间[s, t]; 1.把各区间按照Left从小到大排序,如果区间1的起点大于s,则无解(因为其他区间的左起点更大):否则选 ...
- uvalive 2326 - Moving Tables(区间覆盖问题)
题目连接:2326 - Moving Tables 题目大意:在一个走廊上有400个教室, 先在有一些桌子要移动, 每次移动需要十分钟, 但是不同房间的桌子可以在同一个十分钟内移动,只要走廊没有被占用 ...
- 高效算法——E - 贪心-- 区间覆盖
E - 贪心-- 区间覆盖 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/E 解题思路: 贪心思想, ...
- 外星人的供给站 (区间覆盖 t贪心)
/** 区间覆盖问题 分析: 每个点可以确定两个圆心 圆心的范围形成 一个区间 在这个区间上以任意一点画圆便可将此点 包含在内 如果有两个点所确定的区间相交了 说明这两个点可以用一个圆包含在内 即用一 ...
- Cleaning Shifts(区间覆盖)
/* http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?pid=1019&ojid=1&cid=10 题目: 给定一个时 ...
- UVA 10382 - Watering Grass【贪心+区间覆盖问题+高精度】
UVa 10382 - Watering Grass n sprinklers are installed in a horizontal strip of grass l meters long a ...
- 南阳OJ-12-喷水装置(二)贪心+区间覆盖
题目链接: http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=12 题目大意: 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有 ...
随机推荐
- Mysql 3306 被 linux 防火墙拦截
项目测试时需要本地连接linux服务器的mysql, 发现navicat无法连接 原因一:mysql没有添加外部ip的访问权限. 原因二:mysql 的 3306 端口 处于被防火墙的拦截状态. 解决 ...
- Runtime之方法交换
在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写.和借助类别重名方法暴力抢先之外,还有就是方法交换 方法交换的原理:在OC中调用一个方法其实是向一个对象发送消息,查找消息的唯一 ...
- js获取指定日期n天之后的日期
function addDays(date, days,seperator='-') { let oDate = new Date(date).valueOf(); let nDate = oDate ...
- python刷LeetCode:1.两数之和
难度等级:简单 题目描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不 ...
- openlayers的loaders方式加载
openlayers loaders方式加载 let layerVector = new ol.layer.Vector({ source : new ol.source.Vector({ loade ...
- 题解 P2831 【愤怒的小鸟】
题目 我的天,这题是真的卡精度...... 主要是精度很不好处理,经本蒟蒻测验,精度在\(10^{-6}\)会比较好优雅 [分析] 对于这种某个变量特别小\((\leq 31)\)的题目,本蒟蒻第一反 ...
- UML-操作契约总结
1.操作契约属于什么? 属于用例模型 如图: 2.操作契约在那个阶段引入? 在细化阶段,并非初始阶段. 3.哪些需要写操作契约? 1).最复杂的系统操作 2).最微妙的系统操作
- python3.x设置默认编码(sys.stdout.encoding和sys.defaultencoding)
查了一会资料得出的结论是如果你用的是python3.x,那么就最好别去设置sys.defaultencoding或者sys.stdout.encoding记住在需要编码的时候用encode,解码的时候 ...
- fastDFS 文件系统搭建
1.单机版 https://www.cnblogs.com/chiangchou/p/fastdfs.html#_label3_0 2.集群版
- Oracle存储过程案例集合
注:使用的工具为PLSQL Developer 壹.while简单使用(替换字符串中的字符,和REPLACE效果一样) 注: 这里没有使用REPLACE函数 1.建立存储过程 CREATE OR RE ...