3 条题解

  • 0
    @ 2024-3-18 21:35:52
    #include <bits/stdc++.h>
    using namespace std;
    const int MAX=1e6+100;
    int n,q,ans=0;
    int p[MAX];
    int main(){
    	scanf("%d%d",&n,&q);
    	int l,r;
    	for (int i=1;i<=q;i++){
    		scanf("%d%d",&l,&r);
    		p[l]++;
    		p[r+1]--;
    	}
    	for (int i=1;i<=n;i++){
    		p[i]=p[i-1]+p[i];
    		if (p[i]%2!=0)ans++;
    	}
    	printf("%d",ans);
    	return 0;
    }
    
    • 0
      @ 2021-12-27 20:45:32
      
      证明差分: 序列a[n]为一串数组,例如1 2 3 4 5…… 
      如果b[n]为a[n]的差分数组 根据差分的定义可得
      b[1]=a[1]-a[0]
      b[2]=a[2]-a[1] 
      ……
      b[n]=a[n]-a[n-1] 
      转化一下,求数组b的前缀和,根据上面公式可得
      得b[1]+b[2]+b[3]+...+b[i] = a[1]+(a[2]-a[1])+(a[3]-a[2])+...+(a[i]-a[i-1])=a[i]
      由此可知,原序列为差分序列的前缀和序列
      a[i] = b[1]+b[2]+b[3]+...+b[i] 
      当我想给数组a的区间[x,y]全部增加 对差分数组是如下操作的
      b[x] += c; b[y+1] -= c;
      //把a序列分为[1,x-1],[x,y],[y+1,n]三部分,由差分定义和与前缀和关系可得 
      a[x-1] = b[1]+b[2]+...+b[x-1]; //b[1]~b[x-1]中所有值都未改变,a[x-1]也不变 
      a[x] = b[1]+b[2]+...+b[x-1]+b[x]; //b[x] += c,所以a[x] += c 
      a[x+1] = b[1]+b[2]+...+b[x-1]+b[x]+b[x+1]; //b[x] += c,所以a[x+1] += c
      ...
      //一直到 a[y] = b[1]+b[2]+...b[x]+...+b[y];//b[x] += c,所以a[y] += c 
      a[y+1] = b[1]+b[2]+...b[x]+...+b[y]+b[y+1];//b[x] += c,b[y+1] -= c;所以a[y+1]不变
      //所以由此可知上面的两个语句(b[x] += c;b[y+1] -= c)可以实现a数组在区间[x,y]内的所有值都加上了常数c
      代码:
      
      #include<iostream> 
      using namespace std; 
      int n,m,diff[1000005],ans,x,y;//diff为差分数组初始全为0 
      int main()
      { 
      	cin>>n>>m;
      	for(int i=1;i<=m;i++)
      	{
      		cin>>x>>y;
      		diff[x]+=1;
      		diff[y+1]-=1;//差分操作 
      	}
      	for(int i=1;i<=n;i++)
      	{
      		diff[i]=diff[i-1]+diff[i];//对差分数组求前缀和就得到了a[i] 
      	}
          //因为原数组a都是0,所以此时对差分求完前缀和也就是我们需要的数组
      	for(int i=1;i<=n;i++)
      	{
      		if(diff[i]%2) ans++;//如果元素%2==1说明面朝上,加1
      	}
      	cout<<ans;
          return 0;
      }
      • -3
        @ 2022-4-19 22:44:41

        严禁抄题解,发现后取消成绩

        • 1

        信息

        ID
        535
        时间
        1000ms
        内存
        128MiB
        难度
        4
        标签
        递交数
        129
        已通过
        57
        上传者