【题意】两种操作,[L,R]种新的树(不覆盖原来的),或查询[L,R]树的种类数。n<=50000。

【算法】树状数组||线段树

【题解】这题可以用主席树实现……不过因为不覆盖原来的,所以有更简单的方法。

括号法,对于每个K=1的操作标记左右括号的位置。

对于每个K=2的操作,答案就是right前面的左括号数量-(left-1)前面的右括号数量、

用树状数组或线段树优化。

注意数组在传递给函数时是传递地址,即在函数中修改即相当于修改原数组。

线段树:

#include<cstdio>
const int maxn=;
struct treess{int l,r,sum[];}t[maxn*];
int n,m,a,b,c;
void build(int k,int l,int r)
{
t[k].l=l;t[k].r=r;
if(l!=r)
{
int mid=(l+r)>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
}
}
void insert(int k,int x,int kind)
{
int left=t[k].l,right=t[k].r;
if(left==right)t[k].sum[kind]++;
else
{
int mid=(left+right)>>;
if(x<=mid)insert(k<<,x,kind);
else insert(k<<|,x,kind);
t[k].sum[kind]=t[k<<].sum[kind]+t[k<<|].sum[kind];
}
}
int ask(int k,int l,int r,int kind)
{
int left=t[k].l,right=t[k].r;
if(l<=left&&right<=r)return t[k].sum[kind];
int mid=(left+right)>>,ans=;
if(l<=mid)ans=ask(k<<,l,r,kind);
if(r>mid)ans+=ask(k<<|,l,r,kind);
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
build(,,n);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(a==)
{
insert(,b,);
insert(,c,);
}
else printf("%d\n",ask(,,c,)-ask(,,b-,));
}
return ;
}

树状数组:

#include<cstdio>
#define lowbit(x) x&-x
const int maxn=;
int left[maxn],right[maxn],n,m,a,b,c;
void add(int a[],int x)
{for(int i=x;i<=n;i+=lowbit(i))a[i]++;}
int search(int a[],int x)
{
int ans=;
for(int i=x;i>;i-=lowbit(i))ans+=a[i];
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(a==)
{
add(left,b);
add(right,c);
}
else printf("%d\n",search(left,c)-search(right,b-));
}
return ;
}

最新文章

  1. 逻辑思维面试题-java后端面试-遁地龙卷风
  2. 简单的css js控制table隔行变色
  3. Maven最佳实践:划分模块
  4. source insight 注册码
  5. JS代码的简单重构与优化
  6. YCM的安装与配置
  7. 16个最棒的jQuery视差滚动效果教程
  8. angularjs——工具方法
  9. RESTful规范
  10. 云计算openstack共享组件(1)——时间同步服务ntp
  11. 聊天框Demo:DotNetCore+ActiveMQ+Mqttjs 实现前后台消息监听
  12. B树与B+ 树
  13. Ex 7_21 在一个流网络中,一条边被称为是临界的...第十三次作业
  14. LZW算法PHP实现方法 lzw_decompress php
  15. Python 变量比较
  16. 06.linux文件目录操作命令
  17. ElasticSearch 2 (19) - 语言处理系列之故事开始
  18. leaflet-velocity 参数
  19. python 里面的%s和%r的区别
  20. 表单:checkbox、radio样式(用图片换掉默认样式)

热门文章

  1. Debian常用設置
  2. iOS-tableView刷新指定行,组
  3. TCP系列03—连接管理—2、TCP连接的同时打开和同时关闭
  4. C#中堆和栈的区别?
  5. 【其他】UTF-8带签名与不带签名
  6. MATLAN中矩阵表示中有一维是~表示的意思
  7. 【bzoj3529】[Sdoi2014]数表 莫比乌斯反演+离线+树状数组
  8. 【bzoj1725】[USACO2006 Nov]Corn Fields牧场的安排 状态压缩dp
  9. 重拾C#教程:变量
  10. BZOJ4754 &amp; 洛谷4323 &amp; LOJ2072:[JSOI2016]独特的树叶——题解