贪婪大陆(cogs 1008)
【题目描述】
面对蚂蚁们的疯狂进攻,小FF的Tower defense宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾。现在,小FF的后方是一望无际的大海,前方是变异了的超级蚂蚁。 小FF还有大好前程,他可不想命丧于此, 于是他派遣手下最后一批改造SCV布置地雷以阻挡蚂蚁们的进攻。
小FF最后一道防线是一条长度为N的战壕, 小FF拥有无数多种地雷,而SCV每次可以在[ L , R ]区间埋放同一种不同于之前已经埋放的地雷。 由于情况已经十万火急,小FF在某些时候可能会询问你在[ L' , R'] 区间内有多少种不同的地雷, 他希望你能尽快的给予答复。
【输入格式】
第一行为两个整数n和m; n表示防线长度, m表示SCV布雷次数及小FF询问的次数总和。
接下来有m行, 每行三个整数Q,L , R; 若Q=1 则表示SCV在[ L , R ]这段区间布上一种地雷, 若Q=2则表示小FF询问当前[ L , R ]区间总共有多少种地雷。
【输出格式】
对于小FF的每次询问,输出一个答案(单独一行),表示当前区间地雷总数。
【输入样例】
5 4
1 1 3
2 2 5
1 2 4
2 3 5
【输出样例】
1
2
【数据范围】
对于30%的数据: 0<=n, m<=1000;
对于100%的数据: 0<=n, m<=10^5.
/*
类似于染色的题,但这道题肯定是要在线做的,苦思冥想,不得其解
于是看了看网上的思路:当正着做没法做出来的时候,要往反方面想,
可以求有多少地雷不在某区间,便可得出所求结果。
方法:维护某个点做过几次区间左端点和过几次区间右端点,当我们求
区间(x,y)中的地雷种数时,1~x-1 中做过右端点的地雷区间一定不在
(x,y)中埋有,同理,y+1~n 过左端点的地雷区间也一定不在(x,y)中埋有,所以设p为当前已埋地雷数,ans=p-rsum(1~x-1)-lson(y+1~n)。
*/
#include<cstdio>
#include<iostream>
#define lson l,m,(now<<1)
#define rson m+1,r,(now<<1|1)
#define M 100010
using namespace std;
int lsum[M*],rsum[M*],n,m;
int read()
{
char c=getchar();int num=,flag=;
while(c<''||c>''){if(c=='-')flag=-;c=getchar();}
while(c>=''&&c<=''){num=num*+c-'';c=getchar();}
return num*flag;
}
void lchange(int pos,int l,int r,int now)
{
if(l==r)
{
lsum[now]++;
return;
}
int m=((l+r)>>);
if(pos<=m)lchange(pos,lson);
else lchange(pos,rson);
lsum[now]=lsum[now<<]+lsum[now<<|];
}
void rchange(int pos,int l,int r,int now)
{
if(l==r)
{
rsum[now]++;
return;
}
int m=((l+r)>>);
if(pos<=m)rchange(pos,lson);
else rchange(pos,rson);
rsum[now]=rsum[now<<]+rsum[now<<|];
}
int lquery(int x,int y,int l,int r,int now)
{
if(l>=x&&r<=y)return lsum[now];
int m=(l+r)/,ans=;
if(x<=m)ans+=lquery(x,y,lson);
if(y>m)ans+=lquery(x,y,rson);
return ans;
}
int rquery(int x,int y,int l,int r,int now)
{
if(l>=x&&r<=y)
return rsum[now];
int m=(l+r)/,ans=;
if(x<=m)ans+=rquery(x,y,lson);
if(y>m)ans+=rquery(x,y,rson);
return ans;
}
int main()
{
freopen("greedisland.in","r",stdin);
freopen("greedisland.out","w",stdout);
n=read();m=read();
int p=;
while(m--)
{
int f=read(),x=read(),y=read();
if(f==)
{
lchange(x,,n,);
rchange(y,,n,);
p++;
}
else
{
int lans=,rans=;
if(x->=)lans=rquery(,x-,,n,);
if(y+<=n)rans=lquery(y+,n,,n,);
printf("%d\n",p-lans-rans);
}
}
return ;
}
贪婪大陆(cogs 1008)的更多相关文章
- cogs——1008. 贪婪大陆(清华巨佬代码)——树状数组
1008. 贪婪大陆 ★★ 输入文件:greedisland.in 输出文件:greedisland.out 简单对比时间限制:1 s 内存限制:128 MB 试题四:贪婪大陆 [题 ...
- Cogs 1008. 贪婪大陆(树状数组)
贪婪大陆 难度等级 ★★ 时间限制 1000 ms (1 s) 内存限制 128 MB 测试数据 10 简单对比 输入文件:greedisland.in 输出文件:greedisland.out 简单 ...
- COGS1008. 贪婪大陆[树状数组 模型转换]
1008. 贪婪大陆 ★★ 输入文件:greedisland.in 输出文件:greedisland.out 简单对比时间限制:1 s 内存限制:128 MB 试题四:贪婪大陆 [题 ...
- P2184 贪婪大陆
P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海, 前 ...
- 洛谷 P2184 贪婪大陆 解题报告
P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小\(FF\)的\(Tower\) \(defence\)宣告失败--人类被蚂蚁们逼到了\(Greed\) \(Island\)上的一个海湾.现在 ...
- AC日记——贪婪大陆 洛谷 P2184
贪婪大陆 思路: 树状数组: 跪烂.. 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 int ...
- 【洛谷P2184】贪婪大陆
贪婪大陆 题目链接 对于一个区间[l,r],右端点在l左边即[1,l-1]中的区间与区间[l,r]没有交集, 左端点在r右边即[r,n]中的区间与区间[l,r]没有交集, 其余区间必与[l,r]有交集 ...
- luoguP2184 贪婪大陆 题解(树状数组)
P2184 贪婪大陆 题目 其实很容易理解就是询问一段区间内有多少段不同的区间 然后再仔细思索一下会发现: 1.只要一个区间的开头在一个节点i的左边,那么这个区间包含在区间1~i中. 2.只要一个区 ...
- cogs 1008 贪婪大陆
/* 不要思维定视 盯着线段树维护l r 的ans不放 显然没法区间合并 换一种思路 如果打暴力的话 O(nm) 每次询问 扫一遍之前所有的修改 有交点则说明种数++ 接下来考虑如何优化 我们把每个区 ...
随机推荐
- mvc不登录的情况下无法跳转至其他页面--解决方法之一
在每个控制器里,加以下方法 /// <summary> /// 在调用视图之前拦截非法用户 /// </summary> /// <param name="fi ...
- 初学web前端,掌握这些就足够了!
Web开发如今是如日中天,热的发烫.那我们应该怎么学习呢?这不光是初学者,很多学了几年的人也会有些迷茫或者彷徨,大家也都知道不断学习是不可避免的,不学习肯定要掉队:那怎么学效率更高,那些是坑,那些是路 ...
- IOS访问webserver接口
接口调用参数只能是字符串格式,返回格式支持3种(字符串,数组,DataSet) 需要引用第三方库,包含(DataSet,PlatServinceDataParser,WebserviceCommon, ...
- 【python】入门级识别验证码
前情:这篇文章所提及的内容是博主上个暑假时候做的,一直没有沉下心来把自己的心得写在纸面上,所幸这个假期闲暇时候比较多,想着能写多少是多少,于是就有了此篇. 验证码?我也能破解? 关于验证码的介绍就不多 ...
- 初探ABP--记一些常见的开发问题
1.Update-Database : 无法将“Update-Database”项识别为 cmdlet.函数.脚本文件或可运行程序的名称.请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次. ...
- Windows下使用python库 curses遇到错误消息的解决方案
在Windows系统下执行python应用时,有时会遇到错误信息: ModuleNotFoundError: No module named '_curses'. 然而查看Windows系统里pyth ...
- System.currentTimeMillis()与日期之间的相互转换
System.currentTimeMillis()与日期 之间是可以相互转换的,大多数Android开发者都知道 通过 SimpleDateFormat dateformat = new Simpl ...
- liunx 修改IP地址
1.安装centos系统,这里就不详细说明了. 2.进入到 vi /etc/sysconfig/network-scripts/ifcfg-eth0 后面的名称有些可能不同 其中,有些可能没 ...
- Vue.js系列之vue-router(上) (转载自向朔1992)
概述 Vue非常适用于实践单页面应用程序也就是平时大家说的比较多的SPA(single page application),这点应该了解过Vue的应该都知道吧.一般的单页面应用是基于路由或页面之间的链 ...
- python猜年龄游戏升级版
猜年龄游戏升级版 要求:允许用户最多尝试3次,每尝试3次后,如果还没猜对,就问用户是否还想继续玩,如果回答Y,就继续让其猜3次,以此往复,如果回答N,就退出程序,如何猜对了,就直接退出 age = 1 ...