题目

链接

$Reki$ 在课余会接受一些民间的鹰眼类委托,即远距离的狙击监视防卫.。$Reki$ 一共接收到$m$份委托,这些委托与 $n$ 个直线排布的监视点相关。第 $i$ 份委托的内容为:对于区间 $[r_i, \ j_i]$ 中的监视点,至少要防卫其中的 $k_i$ 个点。$Reki$ 必须完成全部委托,并希望选取尽量少的监视点来防卫。($n \leq 500000, \ m \leq 1000000$)。

分析

一眼看,发现是道差分约束的裸题。设点i的值为sum[i],如果l-r中至少有x个,就是sum[r]-sum[l-1]>=x。

我们把区间根据右端点大小排序。对于每一个区间,若这个区间满足条件就continue,如果不满足就尽量填在右边。

我们采用树状数组来维护,对相应的点进行加1操作、对区间求和操作。最多修改 $n$ 个点,时间复杂度为$O(n \log n)$.

#include<bits/stdc++.h>
using namespace std; const int maxn = + ;
const int maxm = + ;
int a[maxn], n, m;
bool vis[maxn]; struct Node
{
int l, r, k;
bool operator< (const Node& b) const
{
if(r != b.r) return r < b.r;
if(l != b.l ) return l < b.l;
return k > b.k;
}
}q[maxm]; struct BIT
{
int C[maxn];
void init()
{
memset(C, , sizeof(C));
//for (int i = 1; i <= n; i++)
// add(i, a[i]);
}
int lowbit(int x)
{
return x & -x;
}
int sum(int x)
{
int ret = ;
while (x > )
{
ret += C[x];
x -= lowbit(x);
}
return ret;
}
void add(int x, int d)
{
while (x <= n)
{
C[x] += d;
x += lowbit(x);
}
}
}bit; int main()
{
scanf("%d%d", &n, &m);
for(int i=;i < m;i++) scanf("%d%d%d", &q[i].l, &q[i].r, &q[i].k);
sort(q, q+m);
bit.init();
for(int i = ;i < m;i++)
{
int l = q[i].l, r = q[i].r, k = q[i].k;
int num = bit.sum(r) - bit.sum(l-);
if(num >= k) continue; //如果已经满足要求,啥事不管
for(int j = r;j >= l;j--) //从右往左枚举
{
if(!vis[j])
{
vis[j] = true;
num++;
bit.add(j, );
if(num == k) break;
}
}
}
printf("%d\n", bit.sum(n));
return ;
}

参考链接:

1. https://ac.nowcoder.com/discuss/172020

2. https://www.codetd.com/article/4710306

最新文章

  1. View and Data API Tips: Hide elements in viewer completely
  2. sqlmap http头注入的一个技巧
  3. (一)startup.bat
  4. ulink 固件更新问题
  5. thrift在windows的编译/安装--c++版
  6. 基于AutoCAD的空间数据共享平台雏形
  7. ubuntu10.4 server 配置VPN 安装pptp无法连接外网解决(转)
  8. Context是什么,怎么用
  9. GridView事件分析
  10. Java 重入锁 ReentrantLock
  11. Devstack single node Installation on VM
  12. 从PRINCE2引起项目失败的共性原因?
  13. ArcGIS for JavaScript学习(一)
  14. JPA报错问题修改小结
  15. OpenStack与OpenDaylight的对接过程
  16. MongoDB数据库遭大规模勒索攻击,被劫持26000多台服务器 #精选GITHUBMYSQL
  17. QT中VideoProbe的简介和实现
  18. UI设计心得
  19. Jmeter分布式测试的各种坑之jmeter-server修改ip
  20. comet 推送消息到客户端

热门文章

  1. HDU6739 Invoker 【dp】
  2. 《MIT 6.828 Lab 1 Exercise 11》实验报告
  3. 如何查看class文件的编译jdk版本号
  4. oracle杀死正在执行的进程
  5. 【调试经验】C++和C的混合编程以及库调用
  6. MS SQL 2012表分区
  7. 基于TCP 协议的socket 简单通信
  8. kubernetes 健康检查和初始化容器
  9. element-ui组件dialog遇到form
  10. StoneTab标签页CAD插件 3.2.3