对于奶牛L到r,要让奶牛L能看到R的话,就必须得[L+1,r-1]这段区间都要-1,差分数组维护就行。
假设A能看到B,此时修改的是区间【A+1,B-1】,我们不难证明如果下一次的L在【A+1,B-1】里面,那么R也必定在【A,B】里面,因此让[L+1,r-1]这段区间都要-1是最优,无论如果要么是无关的两个区间的更改,要么是区间套区间,不可能出现区间覆盖的情况。
同样需要去除掉一样的数据,比如多次输入同样的L和R这样区间就会一直减下去,结果会出错,所以用map记录一下就ok。
#include<iostream>
#include<map>
using namespace std;
const int N=1e4+100;
int d[N];
int n,i,h,m;
map<int,int>mmap[N];
int main ()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>i>>h>>m;
int l,r;
while(m--)
{
cin>>l>>r;
if(mmap[l][r]==1)
{
continue;
}
mmap[l][r]=1;
mmap[r][1]=1;
if(l<r){
d[l+1]--;
d[r]++;
}
else{
if(d[r+1]<0)continue;
d[r+1]--;
d[l]++;
}
}
d[0]=h;
for(int i=1;i<=n;i++)
{
d[i]=d[i-1]+d[i];
cout<<d[i]<<endl;
}
}


京公网安备 11010502036488号