1 solutions
-
0
Guest MOD
-
0
因为要把 个城墙中至少一个没有被炮塔保护,所以,我们的目标是被炮塔保护个数最少的那个城墙。
因为题目要求要摧毁的炮塔个数,所以只要求出那个城墙的被炮塔保护的个数就行了。
首先,暴力肯定是不行的。这时候,就要利用我们的差分了。
我们定义 s 数组为差分数组。
每次输入都让, 最后回溯求前缀和
答案就显而易见了,就是 s 数组中的最小值。
#include <iostream> #define int long long using namespace std; int n,m; int s[1000005];//差分数组 signed main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n>>m; for(int i = 1;i<=m;i++){ int a,b; cin>>a>>b; s[a]++,s[b+1]--;//差分板子 } for(int i = 1;i<=n;i++){ s[i]+=s[i-1]; } int minn = 0x7fffffffffffffff;//求最小值 for(int i = 1;i<=n;i++){ minn = min(minn,s[i]); } cout<<minn;//输出答案 return 0; }
- 1
Information
- ID
- 1511
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- (None)
- # Submissions
- 80
- Accepted
- 18
- Uploaded By