首页 > 其他分享 >6566: 校门外的树2 树状数组

6566: 校门外的树2 树状数组

时间:2023-05-31 21:24:09浏览次数:45  
标签:return 树状 int res 6566 数组 lowbit

描述

 

 

校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两种操作:

K=1,读入 l,r 表示在 l 到 r 之间种上一种树,每次操作种的树的种类都不同;

K=2,读入 l,r 表示询问 l 到 r 之间有多少种树。

注意:每个位置都可以重复种树。

 

 

输入

 

 

第一行 n,m 表示道路总长为 n,共有 m 个操作;

接下来 m 行为 m 个操作。

对于 20% 的数据,1≤n,m≤100;

对于 60% 的数据,1≤n≤103,1≤m≤5×104 ;

对于 100% 的数据,1≤n,m≤5×104 ,保证 l,r>0。

 

 

输出

 

 

对于每个 k=2 输出一个答案。

 

 

样例输入

 

5 4
1 1 3
2 2 5
1 2 4
2 3 5

样例输出

1
2

树状数组

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5e4+10,inf = 0x3f3f3f3f;
int t1[N],t2[N];
int n,m,k,l,r;
int lowbit(int x)
{
    return x&(-x);
}
void updata1(int x,int v) //在x点加上v
{
    while(x<=n)
    {
        t1[x]+=v;
        x+=lowbit(x);
    }
} 
void updata2(int x,int v) //在x点加上v
{
    while(x<=n)
    {
        t2[x]+=v;
        x+=lowbit(x);
    }
} 
int sum1(int x)
{
    int res = 0;
    while(x>0)
    {
        res+=t1[x];
        x-=lowbit(x);
    }
    return res;
}
int sum2(int x)
{
    int res = 0;
    while(x>0)
    {
        res+=t2[x];
        x-=lowbit(x);
    }
    return res;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&k,&l,&r);
        if(k==1)updata1(l,1),updata2(r,1); //在l到r种树,所以要在l和r加上一个(和)
        else printf("%d\n",sum1(r)-sum2(l-1)); 
    }
     return 0;
}

 

标签:return,树状,int,res,6566,数组,lowbit
From: https://www.cnblogs.com/jyssh/p/17447347.html

相关文章

  • 2023-05-31:给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数 在你跳跃的过程
    2023-05-31:给定一个整数数组A,你可以从某一起始索引出发,跳跃一定次数在你跳跃的过程中,第1、3、5...次跳跃称为奇数跳跃而第2、4、6...次跳跃称为偶数跳跃你可以按以下方式从索引i向后跳转到索引j(其中i<j):在进行奇数跳跃时(如,第1,3,5...次跳跃),你将会跳到索引j使得A[......
  • 2023-05-31:给定一个整数数组 A,你可以从某一起始索引出发,跳跃一定次数 在你跳跃的过程
    2023-05-31:给定一个整数数组A,你可以从某一起始索引出发,跳跃一定次数在你跳跃的过程中,第1、3、5...次跳跃称为奇数跳跃而第2、4、6...次跳跃称为偶数跳跃你可以按以下方式从索引i向后跳转到索引j(其中i<j):在进行奇数跳跃时(如,第1,3,5...次跳跃),你将会跳到索引j使得A[i]<=......
  • 树状数组详解
    先来看几个问题吧。1.什么是树状数组?顾名思义,就是用数组来模拟树形结构呗。那么衍生出一个问题,为什么不直接建树?答案是没必要,因为树状数组能处理的问题就没必要建树。和Trie树的构造方式有类似之处。2.树状数组可以解决什么问题可以解决大部分基于区间上的更新以及求和问题。......
  • 如何使用TreeView展示树状数据
    如何使用TreeView展示树状数据TreeView是一个可用于显示树形数据结构的UI组件。它提供了一个可折叠、可展开的树状视图。TreeView是一个树状结构,其根节点的类型是TreeItem。每个TreeItem又可以包含若干TreeItem。由此可组成一颗树形结构。效果展示示例代码importj......
  • POJ2352 stars(树状数组)
    题目:Stars #include<stdio.h>#include<string.h>constintN=32005;intC[N];intlevel[N];intLowbit(intx){returnx&(-x);}voidUpdate(intx){inti;for(i=x;i<=N;i+=Lowbit(i)){C[i]++;}}i......
  • HDU1403(后缀数组--最长公共子串)
    题目:LongestCommonSubstring题意:判断给定的两个串中,最长的公共串。思路:将它们合并为一个串,然后利用后缀数组求解。首先是二倍增算法:时间复杂度为O(n*log(n))#include<stdio.h>#include<string.h>#definemax1000010intwa[max],wb[max],wv[max],ws[max];intrank[max],he......
  • php空数组push
    在PHP中,可以使用array_push()函数向数组末尾添加一个或多个元素。但是,如果要向空数组中添加元素,则需要注意一些特殊情况。以下是向空数组添加元素的示例代码:<?php$myArray=array();//定义一个空数组array_push($myArray,"element1","element2");//向数组添加两个元素......
  • 算法总结——堆栈、字符串、数组类题目
    先说stack的题目stack的实现:链表,数组题目:(1)简单的:minstack,一个数组实现三个stack(2)经典的stack问题:经典汉诺塔问题,逆波兰式计算或者产生逆波兰式,简化文件路径,验证括号对是否合法,找出最长有效括号(贪心+stack求解)(3)涉及tree的遍历问题:tree中序遍历的迭代解法,二叉搜索树的两节点和(twosu......
  • 1.动态数组
    1.动态数组结构  上图所示,该动态数组有3个元素,空间容量是6,每个元素类型为void*,因为void*可以接受任何类型指针,可以用来存各种类型指针。第一个元素地址为pAddr,第一个元素为*pAddr。用结构体表示动态数组为://动态数组结构体structdynamicArray{ void**pAddr;//维护真实......
  • Web - js数组对象去重
    letarr=[{id:'1',key:'1',value:'明月'},{id:'3',key:'2',value:'可欣'}}]Map()方法set方法设置key所对应的键值,然后返回整个Map结构。如果key已经有值,则键值会被更新,否则就新生成该键。values方法可......