首页 > 其他分享 >ZCMU-1156

ZCMU-1156

时间:2024-05-20 18:43:19浏览次数:11  
标签:end 树状 int 1156 ZCMU start 数组 include

image
image


思路:

  1. 要改变的是一个范围的情况,所以正常情况下会超时。
  2. 查阅后知道应该用一个叫做树状数组的结构。

查阅和树状数组的后续情况
这个也不错


注意:

  • 我没怎么看懂,可能没太仔细看。
  • 树状数组当中存在的是前后的差,所以每次变动只是在start,end+1变动.
  • 因为一直上去的是lowbit情况,方便后面前缀和。
  • 因为树状数组存放的不是本身的值,通过前缀和来求到。

#include<cstdio> 
#include<iostream>
#include<cstring>
using namespace std;
const int MAX=1000005;
int lan[MAX];
int n,m;
//树状数组的相关知识 
int lowbit(int x){
    return x&(-x);
}
//单点更新 
void update(int x,int val){
    for(int i=x;i<=n;i+=lowbit(i)){
        lan[i]+=val;
    }
}
//范围更新 
void range_update(int start,int end,int val){
    update(start,val);
    //其中树状数组存放的是前后的差。
    //在数里面修改和差为logN,没有遍历。 
    update(end+1,-val);
}
//前缀和 
int ask(int x){
    int sum=0;
    for(int i=x;i;i-=lowbit(i))
        sum+=lan[i];
        return sum;
}
int main(){
     
    while(~scanf("%d%d",&n,&m)){
        memset(lan,0,sizeof(lan));
        for(int i=0;i<m;i++){
            int flag,start,end;
             
            scanf("%d%d%d",&flag,&start,&end);
            //可能出现后大,题目没有告知谁大 
            if(start>end) swap(start,end);
             
            if(flag){
                range_update(start,end,1);
            }else{
                for(int j=start;j<=end;j++){
                    if(ask(j)&1)cout<<1;
                    else cout<<0; 
                }
                cout<<endl;
            }
        }
    }
    return 0;
}

标签:end,树状,int,1156,ZCMU,start,数组,include
From: https://www.cnblogs.com/hai-zei/p/18202597

相关文章

  • ZCMU-1153
    思路一个感觉是规律问题的数学问题因为输入的是n所以要的出有关n的关系或者关系有关排序,所以可以从位次入手,设双胞胎前一个位置在ai,后一个在bi.Sum(bi-ai)=(2+3+4+5+6+...+n+1)=(1+2+3+4+5+6+...+n)+n*1=((n+1)*n)/2+n;Sum(ai+bi)=(1+2+3+4+....+2n)=((1+2n)*(2*n))/2......
  • ZCMU-1136
    思路一个数学问题要知道1为奇数,2^x次方一定为偶数。偶数=奇数+奇数,而奇数=奇数*奇数,所以x一定要是奇数才可以。注意没告诉范围所以要往大的方向考虑其中1能够被任一整数整除,所以前面加上对1的判断参考(费马小定理)#include<stdio.h>intmain(){inti,n,temp......
  • ZCMU-1111
    与背包和动态规划有关(我认为)采用dp数组存放吃掉i千克食物要用掉的钱dp最开始要尽量的大方便过程中判断和最后的输出判断实时更新dp,保留最小的钱以前不知道的printf函数可以这样用fill函数填充数组,(开始,结束,填充值);C和C++结构体里面可以放函数学习#include<c......
  • ZCMU-1129
    数学公式题罢了学长1.斯特灵公式:2.对数公式(因为以10为底,得到的是10^x,所以最后向下取整加上1);#include<cstdio>#include<cmath>usingnamespacestd;constdoublePI=acos(-1);constdoublee=exp(double(1));intstr(intn){returnfloor(log10(sqrt(2*PI*n))+......
  • ZCMU-1110
    思路:-首先可以知道最少动就是从三个角对称的划分因为不是对称划分则会出现破坏了正三角,后面还要重新对好之后就可以进行推导(按三角形我没看懂)其中设底上截出来的三角形的底为i,则上面就是n-2*i-1;所以动的数就可以算出来:[6*i^2+(4-4n)i+(n*n-n)]/2;最小就是i=(......
  • ZCMU-1101
    这个题不怎么难,就是当时没有理解到字典序的意思:我一直以为是自己元素间的比较,后再同学帮助下明白这里是与其他比,这样就很简单了。就是要求当前那个最小就可以了。对这道题我有点吐槽明明自己都说了最后一组数据没有空行,但是最后AC后的代码还是有换行的!#include<string.h>......
  • ZCMU-1053
    比较简单记录一下主要感觉它这个题目没说清楚,题目要求:先有n,接着给出长度为n的标准组,然后给出猜测组,输出的两个数一个是有多少个是相对应的既相同坐标其数值也相同,后一个是两个都有但是位置不同(不含已经相同的)我觉得它少了一类个例子:类似于123436133343思路:用......
  • ZCMU-1051
    比较来说不太难其实,当然找到一定的公式这与前面的1033相识,都会用到f(i,j)=f(i-1,j)+f(i-1,j-1)我们可以先从小部分看出来,一层可以整体或者两部分,在面对第i层看前面i-1层中分成j-1分和j分,但是又因为自己可以分成分开与不分开所以要用到三维数组,分别放置不分开与分开我觉得......
  • ZCMU-1033
    我觉得这位大佬说的已经很好了,可以直接看她的思路了;大佬思路但是她的代码没有考虑到1111的情况,代码思路这个是可以的很长且没有注释;#include<bits/stdc++.h>usingnamespacestd;longlongd[40][40];longlongc[40][40];longlonga[40];longlongx,y;intk,b;......
  • ZCMU操作系统课程实验 - 实验1-Linux的使用
    登录1.打开这个东西2. 在  文件->打开    中打卡机房里VMOS文件里的这个东东 3.然后依次操作下去好了,有红色的选项,我都是选的"Donothing"。完成后就会出现这样一个黑框框。4.让你登录。输入:root。密码:superuser    。注意输入密码的时候,密......