线段树【p2706】贪婪大陆
Background
面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾。现在,小FF的后方是一望无际的大海, 前方是变异了的超级蚂蚁。 小FF还有大好前程,他可不想命丧于此, 于是他派遣手下最后一批改造SCV布置地雷以阻挡蚂蚁们的进攻。
Description
小FF最后一道防线是一条长度为N的战壕, 小FF拥有无数多种地雷,而SCV每次可以在[ L , R ]区间埋放同一种不同于之前已经埋放的地雷。 由于情况已经十万火急,小FF在某些时候可能会询问你在[ L' , R'] 区间内有多少种不同的地雷, 他希望你能尽快的给予答复。
Input
第一行为两个整数n和m; n表示防线长度, m表示SCV布雷次数及小FF询问的次数总和。
接下来有m行, 每行三个整数Q,L , R; 若Q=1 则表示SCV在[ L , R ]这段区间布上一种地雷, 若Q=2则表示小FF询问当前[ L , R ]区间总共有多少种地雷。
Output
对于小FF的每次询问,输出一个答案(单独一行),表示当前区间地雷总数。
思路巧妙的一个好题!
刚开始读错题就很伤
对于修改操作.
我们维护区间左端点与右端点对答案的贡献.(看完下面你会知道有什么用的)
而询问操作中,
我们已知区间\([l,r]\),此时只需要查询\([1,l-1]\)中的右端点的数量,\([r+1,n]\)的左端点数量.
显然,这个时候这两部分区间的地雷不会对\([l,r]\)构成影响.
我们再用一个变量\(tot\)维护已经埋下的地雷的种数.
此时用\(tot\)减去我们查询的左右两侧的地雷的数量即为当前的答案.
思路很巧妙,好题+
代码
#include<cstdio>
#include<algorithm>
#include<iostream>
#define ls o<<1
#define rs o<<1|1
#define R register
#define N 100008
using namespace std;
inline void in(int &x)
{
int f=1;x=0;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
while(isdigit(s)){x=x*10+s-'0';s=getchar();}
x*=f;
}
int n,m,tot;
struct cod{int pre,lst;}tr[N<<3];
void change_pre(int o,int l,int r,int pos)
{
if(l==r){tr[o].pre++;return;}
int mid=(l+r)>>1;
if(pos<=mid)change_pre(ls,l,mid,pos);
else change_pre(rs,mid+1,r,pos);
tr[o].pre=tr[ls].pre+tr[rs].pre;
}
void change_lst(int o,int l,int r,int pos)
{
if(l==r){tr[o].lst++;return;}
int mid=(l+r)>>1;
if(pos<=mid)change_lst(ls,l,mid,pos);
else change_lst(rs,mid+1,r,pos);
tr[o].lst=tr[ls].lst+tr[rs].lst;
}
int query_pre(int o,int l,int r,int x,int y)
{
if(x<=l and y>=r) return tr[o].pre;
int mid=(l+r)>>1,res=0;
if(x<=mid)res+=query_pre(ls,l,mid,x,y);
if(y>mid)res+=query_pre(rs,mid+1,r,x,y);
return res;
}
int query_lst(int o,int l,int r,int x,int y)
{
if(x<=l and y>=r)return tr[o].lst;
int mid=(l+r)>>1,res=0;
if(x<=mid)res+=query_lst(ls,l,mid,x,y);
if(y>mid) res+=query_lst(rs,mid+1,r,x,y);
return res;
}
int main()
{
in(n),in(m);
for(R int i=1,opt,l,r;i<=m;i++)
{
in(opt),in(l),in(r);
if(opt==1)
{
change_pre(1,1,n,l);
change_lst(1,1,n,r);
tot++;
}
else
printf("%d\n",tot-query_lst(1,1,n,1,l-1)-query_pre(1,1,n,r+1,n));
}
}
线段树【p2706】贪婪大陆的更多相关文章
- COGS1008. 贪婪大陆[树状数组 模型转换]
1008. 贪婪大陆 ★★ 输入文件:greedisland.in 输出文件:greedisland.out 简单对比时间限制:1 s 内存限制:128 MB 试题四:贪婪大陆 [题 ...
- luoguP2184 贪婪大陆 题解(树状数组)
P2184 贪婪大陆 题目 其实很容易理解就是询问一段区间内有多少段不同的区间 然后再仔细思索一下会发现: 1.只要一个区间的开头在一个节点i的左边,那么这个区间包含在区间1~i中. 2.只要一个区 ...
- Cogs 1008. 贪婪大陆(树状数组)
贪婪大陆 难度等级 ★★ 时间限制 1000 ms (1 s) 内存限制 128 MB 测试数据 10 简单对比 输入文件:greedisland.in 输出文件:greedisland.out 简单 ...
- P3932 浮游大陆的68号岛 【线段树】
P3932 浮游大陆的68号岛 有一天小妖精们又在做游戏.这个游戏是这样的. 妖精仓库的储物点可以看做在一个数轴上.每一个储物点会有一些东西,同时他们之间存在距离. 每次他们会选出一个小妖精,然后剩下 ...
- 线段树 洛谷P3932 浮游大陆的68号岛
P3932 浮游大陆的68号岛 题目描述 妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活. 换用更高尚的说法,是随时准备着为这个无药可救的世界献身. 然而孩子们的生活却总是无忧无 ...
- cogs——1008. 贪婪大陆(清华巨佬代码)——树状数组
1008. 贪婪大陆 ★★ 输入文件:greedisland.in 输出文件:greedisland.out 简单对比时间限制:1 s 内存限制:128 MB 试题四:贪婪大陆 [题 ...
- P1243~P1247 线段树模板题总结
前言 这几天刚刚刷了5道线段树(水)题,现在来总结一下. 首先是犯的不少错误: 1.建树.更新函数没有return.这是最气的,每次最后程序错误查了半天也没查出来,最后发现是没有return.递归边界 ...
- P2184 贪婪大陆
P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海, 前 ...
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】
黑白图像直方图 发布时间: 2017年7月9日 18:30 最后更新: 2017年7月10日 21:08 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...
- 洛谷 P2184 贪婪大陆 解题报告
P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小\(FF\)的\(Tower\) \(defence\)宣告失败--人类被蚂蚁们逼到了\(Greed\) \(Island\)上的一个海湾.现在 ...
随机推荐
- C#范型实例化对象
T s = System.Activator.CreateInstance<T>();
- 【POJ 2572 Advertisement】
Time Limit: 1000MSMemory Limit: 10000K Total Submissions: 947Accepted: 345Special Judge Description ...
- git使用笔记(九)操作原理
By francis_hao Nov 27,2016 参考[1]的一张图已经把git的基本原理描述的很清楚了,如下: 下面以实例演示其过程,需要用到两个命令cat-file和ls-fil ...
- Spring事务管理—aop:pointcut expression 常见切入点表达式及事务说明
Spring事务管理—aop:pointcut expression 常见切入点表达式及事物说明 例: <aop:config> <aop:pointcut expression= ...
- [CF816E] Karen and Supermarket1 [树形dp]
传送门 - > \(CF816E\) Karen and Supermarket 题意翻译 在回家的路上,凯伦决定到超市停下来买一些杂货. 她需要买很多东西,但因为她是学生,所以她的预算仍然很有 ...
- The XOR Largest Pair [Trie]
描述 在给定的N个整数A1,A2--AN中选出两个进行xor运算,得到的结果最大是多少? 输入格式 第一行一个整数N,第二行N个整数A1-AN. 输出格式 一个整数表示答案. 样例输入 3 1 2 3 ...
- ng父组件调用子组件的方法
https://www.pocketdigi.com/20170204/1556.html 组件之间方法的调用统一用中间人调用.数据传递直接input和output即可
- ng的ngModel用来处理表单操作
https://segmentfault.com/a/1190000009126012
- LA2995 Image is everything
蓝书P12 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm ...
- 通过AWS的DHCP自动获取的IP地址是否会发生改变?
针对您的问题,分析如下:1.在一个VPC内,通过AWS的DHCP自动获取的IP地址,在如何情况下会发生改变?例如我把vpc的内所有100个ec2实例全部关闭,再全部重新打开,是否会发生IP地址变化的情 ...