1 solutions

  • 0
    @ 2025-6-18 11:39:28

    因为要把 nn 个城墙中至少一个没有被炮塔保护,所以,我们的目标是被炮塔保护个数最少的那个城墙。

    因为题目要求要摧毁的炮塔个数,所以只要求出那个城墙的被炮塔保护的个数就行了。

    首先,暴力肯定是不行的。这时候,就要利用我们的差分了。

    我们定义 s 数组为差分数组。

    每次输入都让,s[L],s[R]++s[L]--,s[R]++ 最后回溯求前缀和

    答案就显而易见了,就是 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