【题目描述】 
面对蚂蚁们的疯狂进攻,小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 
【输出样例】 


【数据范围】 
对于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)的更多相关文章

  1. cogs——1008. 贪婪大陆(清华巨佬代码)——树状数组

    1008. 贪婪大陆 ★★   输入文件:greedisland.in   输出文件:greedisland.out   简单对比时间限制:1 s   内存限制:128 MB 试题四:贪婪大陆  [题 ...

  2. Cogs 1008. 贪婪大陆(树状数组)

    贪婪大陆 难度等级 ★★ 时间限制 1000 ms (1 s) 内存限制 128 MB 测试数据 10 简单对比 输入文件:greedisland.in 输出文件:greedisland.out 简单 ...

  3. COGS1008. 贪婪大陆[树状数组 模型转换]

    1008. 贪婪大陆 ★★   输入文件:greedisland.in   输出文件:greedisland.out   简单对比时间限制:1 s   内存限制:128 MB 试题四:贪婪大陆  [题 ...

  4. P2184 贪婪大陆

    P2184 贪婪大陆   题目背景 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海, 前 ...

  5. 洛谷 P2184 贪婪大陆 解题报告

    P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小\(FF\)的\(Tower\) \(defence\)宣告失败--人类被蚂蚁们逼到了\(Greed\) \(Island\)上的一个海湾.现在 ...

  6. AC日记——贪婪大陆 洛谷 P2184

    贪婪大陆 思路: 树状数组: 跪烂.. 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 int ...

  7. 【洛谷P2184】贪婪大陆

    贪婪大陆 题目链接 对于一个区间[l,r],右端点在l左边即[1,l-1]中的区间与区间[l,r]没有交集, 左端点在r右边即[r,n]中的区间与区间[l,r]没有交集, 其余区间必与[l,r]有交集 ...

  8. luoguP2184 贪婪大陆 题解(树状数组)

    P2184 贪婪大陆  题目 其实很容易理解就是询问一段区间内有多少段不同的区间 然后再仔细思索一下会发现: 1.只要一个区间的开头在一个节点i的左边,那么这个区间包含在区间1~i中. 2.只要一个区 ...

  9. cogs 1008 贪婪大陆

    /* 不要思维定视 盯着线段树维护l r 的ans不放 显然没法区间合并 换一种思路 如果打暴力的话 O(nm) 每次询问 扫一遍之前所有的修改 有交点则说明种数++ 接下来考虑如何优化 我们把每个区 ...

随机推荐

  1. 原创 Repeater radio 单选和多选混合

    希望高手朋友给我留下美好的意见,在此先感谢您! 前台代码repeater: <script src="../Scripts/jquery-1.9.1.js"></ ...

  2. java课程设计全程实录——第0天

    本次课设计划在5月25日完成.目前还剩18天. 第0天主要完成事项如下: 搭建开发环境 制定开发进度规划表 阅读前人的课设 详细: 1.IDE的下载,安装,以及配合使用的阿里巴巴编程规约插件的安装与测 ...

  3. SQL异常为"当IDENTITY_INSERT设置为OFF时" 的解决

    误删数据库时,可以利用insert插入删除的数据,但是有时表可能有自增字段如id.这是插入数据如果包含自增字段就会出现错误,提示"IDENTITY_INSERT设置为OFF,插入失败&quo ...

  4. HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法

    基础内容 容器就是一种装其他各种对象的器皿.java.util包 容器:Set, List, Map ,数组.只有这四种容器. Collection(集合) 一个一个往里装,Map 一对一对往里装. ...

  5. Excel数据导入SQL Server

    基本有2种方案,都是无需安装Office的方案 Ole DB读取 + BulkCopy 获取Excel各个SheetName //连接串 string strConn = "Provider ...

  6. MFC技术积累——基于MFC对话框类的那些事儿2

    3. 绘图 3.1 对话框资源编辑 首先通过添加控件的方式来创建一个简单的绘图对话框如图所示,创建步骤为: 第一.在VC++6.0软件环境的灰色空白区域右击,选中Controls,然后会弹出一个控件对 ...

  7. 嵌入式C语言-学习书籍推荐(pdf附上百度云链接)

    先推荐学习视频网站: https://www.bilibili.com/video/av22631677?from=search&seid=800092160484173881 书籍只推荐2本 ...

  8. sysUpload.vue上传组件 的时候 看进度的时候 不要mock 注释掉 // if (process.env.NODE_ENV !== 'production') require('@/mock')

    上传组件 的时候 看进度的时候 不要mock 注释掉 // if (process.env.NODE_ENV !== 'production') require('@/mock') <!-- * ...

  9. vue 高度 动态更新计算 calcHeight watch $route

    vue 高度 动态更新计算 calcHeight () { // this.tableHeight = window.innerHeight - 210 } }, mounted () { // co ...

  10. webpack打包 css文件里面图片路径 替换位置

    { test: /\.css$/, use: ExtractTextPlugin.extract({ use: ['css-loader?minimize', 'autoprefixer-loader ...