差分及模板题
基础思想
两个模板题
增减序列
ACwing 增减序列
注意:对应
i
=
1
i=1
i=1的情况,不计入正负计数
LL a[maxn],b[maxn];
int main () {
int n;
cin>>n;
LL pos=0,neg=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(i==1)b[i]=a[i];
else b[i]=a[i]-a[i-1];
if(i!=1){
if(b[i]>0)pos+=b[i];
if(b[i]<0)neg+=-1*b[i];
}
}
b[n+1]=0;
cout<<max(pos,neg)<<endl;
cout<<abs(pos-neg)+1<<endl;
return 0;
}
Tallest Cow
- 可能两次操作一样,要排序去重
- 可能前大后小,记得swap
struct node{
int a,b;
}in[maxn];
bool cmp(node aa,node bb){
if(aa.a==bb.a)return aa.b<bb.b;
else return aa.a<bb.a;
}
int a[maxn];
int main () {
int n,i,h,r,A,B,ans,x,y;
while(scanf("%d%d%d%d",&n,&i,&h,&r)!=EOF){
ans=0;
for(int i=1;i<=n;i++)a[i]=0;
for(int i=1;i<=r;i++){
scanf("%d%d",&in[i].a,&in[i].b);
if(in[i].a>in[i].b)swap(in[i].a,in[i].b);
}
sort(in+1,in+1+r,cmp);
for(int i=1;i<=r;i++){
if(in[i].a==in[i-1].a&&in[i].b==in[i-1].b)continue;
x=in[i].a;y=in[i].b;
a[x+1]--;
a[y]++;
}
for(int i=1;i<=n;i++){
ans+=a[i];
printf("%d\n",ans+h);
}
}
return 0;
}