题目在这里哦, 戳一下就可以了~

题目大意:
支持两种操作,区间添加一种新元素,查询区间颜色种数..

题目标签是线段树啊,我也本来想写一个线段树,后来写不出来……(我太弱了orz)
然后就草率地看了看题解里面的思路咯,感觉思路非常的不错,于是我就A掉这题之后写了这篇blog…


我们通过这幅图可以看到:
- 我们直接统计区间的覆盖不是很好统计, 考虑前缀
- 当前我们已经进行了10次覆盖
- 从[1,R]这个区间中有9个覆盖
- 但是其中有3个覆盖完全在L的左侧(即右端点在[1,L-1])
- 所以应该只有6次覆盖在[L,R]范围内
- ∴ans=6

我们可以发现,这是一个区间覆盖的问题,询问的答案是[1,r]中的种类数减去[1,l-1] 中的右端点数…
然后此题就沦为了一道区间和单点修改单点和区间查询的题目…
我们可以用两个不同的数据结构来分别维护右端点数目和种类数…我们整理了一下发现:
- 对于右端点,我们修改的时候在右端点单点加,查询的时候区间查询[1,l-1]..
- 对于种类数,我们修改的时候做区间加,往区间[l,n]加上,查询的时候单点查 r点的值..

所以,一个单点加区间查,一个区间加单点查,就是这样两个树状数组的基本操作了…
而区间操作都是含1和n的,所以我们就可以省掉一些步骤..
最后写出来就是这样:

#include <cstdio>
const int N=101010;
inline int gnum(){
int a=0;char c=getchar();for(;c<'0'||c>'9';c=getchar());
for(;c>='0'&&c<='9';c=getchar()) a=(a<<1)+(a<<3)+c-'0'; return a;
}
int t[2][N],n,m;
void add(int *c,int x){for(;x<=n;x+=x&-x)++c[x];}
int query(int *c,int x){int s=0;for(;x;x-=x&-x)s+=c[x];return s;}
int main(){
n=gnum(),m=gnum();
for(int i=1;i<=m;++i){
int o=gnum(),l=gnum(),r=gnum();
//端点:单点r加1 区间1..l-1查
//种类:区间l..n加1 单点r查
if(o-2) add(t[0],l),add(t[1],r);
else printf("%d\n",query(t[0],r)-query(t[1],l-1));
}
}

这样就可以咯~

【学术篇】luogu2184贪婪大陆的更多相关文章

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

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

  2. P2184 贪婪大陆

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

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

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

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

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

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

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

  6. 【洛谷P2184】贪婪大陆

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

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

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

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

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

  9. 【学术篇】51nod 1238 最小公倍数之和

    这是一道杜教筛的入(du)门(liu)题目... 题目大意 求 \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \] 一看就是辣鸡反演一类的题目, 那就化式子呗.. \[ \s ...

随机推荐

  1. spark在不同环境下的搭建|安装|local|standalone|yarn|HA|

    spark的集群环境安装搭建 1.spark local模式运行环境搭建 常用于本地开发测试,本地还分为local单线程和local-cluster多线程; 该模式被称为Local[N]模式,是用单机 ...

  2. NXOpenC#_Training_intro(cn)【转载】

  3. 微信小程序--跳转页面常用的两种方法

    一.bindtap="onProductsItemTap"绑定点击跳转事件 在.wxml文件中绑定 在.js文件中实现绑定事件函数 二.navigator标签配合URL跳转法 在w ...

  4. Python 爬虫-爬取京东手机页面的图片

    具体代码如下: __author__ = 'Fred Zhao' import requests from bs4 import BeautifulSoup import os from urllib ...

  5. xslt数值的函数与xslt字符串函数

    以下是xslt数值的函数与xslt字符串函数的说明与参考示例. 1.xslt数值的函数:(1)fn:number(arg) 返回参数的数值.参数可以是布尔值.字符串或节点集. 示例:<xsl:v ...

  6. 剑指offer——30栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...

  7. Leetcode207. Course Schedule课程表

    现在你总共有 n 门课需要选,记为 0 到 n-1. 在选修某些课程之前需要一些先修课程. 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1] 给定课程总量以及它 ...

  8. 调整VMware中虚拟机中Linux系统屏幕分辨率的问题

    即:解决显示底部菜单栏以及安装软件中没有下一步的按钮用Tab键的问题 右击打开终端,输入以下命令: Xrandr Xrandr -s  1280x720 (自己选择一个分辨率即可) 原文:https: ...

  9. pipenv的使用

    首先,确保pip install pipenv已经安装 1.新建一个文件夹,并在地址栏输入cmd,回车. 2.输入pipenv install,等待虚拟环境搭建完毕. 3.输入pipenv shell ...

  10. 2016.8.15上午纪中初中部NOIP普及组比赛

    2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...