【题目描述】
CodeForces - 641ELittle Artem and Time Machine
【题目分析】
题目的意思大概是有三种操作
1.在时间t加入一个数字x
2.在时间t删除一个数字x
3.询问在时间t集合里面x的个数

虽然题目描述很简单,但是t和x的范围都是109,我一开始想到的是主席树,因为之前做过一道类似的题目HDU - 4348To the moon——主席树+区间修改,然后我就开始兴冲冲的开始离散化,然后正准备写主席树的维护的时候才发现因为这个时间是跳跃的,所以我们很不容易用到之前的数据,也不容易修改,所以卡住了。
在网上找其他大佬的博客发现用map以后就不用进行离散化了,而且代码量非常少,仔细一看发现他用的是树状数组,大概的思想就是对于每一个x都用一个树状数组维护时间区间,每次修改都在时间轴上进行修改,每次查询也只是针对这个数字在时间轴上进行查询。我觉得对每一个数字用一个线段树进行维护应该也可以做,就是得把每个数字的修改的时间进行离散化,然后再分别建树可能复杂度会有点高,但应该也是可做的吧,反正我是懒得那样做了,这个map+树状数组真的好爽啊,什么离散化什么的完全不需要啊。
【AC代码】

#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;const int MAXN=100005;
const int INF=1e9+5;
map<int,int> mp[MAXN];
map<int,int> vis;
int cnt=0;int lowbit(int t)
{return t&(-t);
}void update(int pos,int t,int val)
{while(t<INF){mp[pos][t]+=val;t+=lowbit(t);}
}int sum(int pos,int t)
{int ans=0;while(t){ans+=mp[pos][t];t-=lowbit(t);}return ans;
}int main()
{int n,cmd,t,x;while(~scanf("%d",&n)){cnt=0;vis.clear();while(n--){scanf("%d%d%d",&cmd,&t,&x);if(cmd==1){if(!vis[x]){vis[x]=++cnt; mp[cnt].clear();}update(vis[x],t,1);}else if(cmd==2){update(vis[x],t,-1);}else if(cmd==3){printf("%d\n",sum(vis[x],t));}}}return 0;
}

CodeForces - 641ELittle Artem and Time Machine——map+树状数组相关推荐

  1. CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段)

    CodeForces 390E Inna and Large Sweet Matrix(树状数组改段求段) 树状数组仅仅能实现线段树区间改动和区间查询的功能,能够取代不须要lazy tag的线段树.且 ...

  2. CodeForces 869E The Untended Antiquity 二维树状数组,随机hash

    CodeForces 869E 题意: n*m 的格子,有三种操作, 1.在一个矩形周围加一层障碍.2.把一个矩形周围的障碍去掉. 3.询问两个格子是否可达.     题目保证不会有矩形障碍交叉,且去 ...

  3. codeforces 869 E. The Untended Antiquity(树状数组)

    题目链接:http://codeforces.com/contest/869/problem/E 题解:这题是挺好想到solution的但是不太好写,由于题目的特殊要求每个矩形不会重贴所以只要这两个点 ...

  4. Codeforces数学1600----day1[同余定理,树状数组+两次二分,,组合计数]

    1.C. Kuroni and Impossible Calculation **知识点:同余定理 ** #include <iostream> #include <cstdio&g ...

  5. Codeforces #528 Div2 F (1087F) Rock-Paper-Scissors Champion 树状数组+set

    题意:n个人站成一排,初始时刻每个人手中都有一个图案,可能是石头,剪刀,布3个中的1种,之后会随机选取相邻的两个人玩石头剪刀布的游戏,输的人会离开(如果两个人图案相同,则随机选择一个人离开).执行(n ...

  6. 程序员面试金典 - 面试题 10.10. 数字流的秩(map/树状数组)

    文章目录 1. 题目 2. 解题 2.1 map 2.2 树状数组 1. 题目 假设你正在读取一串整数.每隔一段时间,你希望能找出数字 x 的秩(小于或等于 x 的值的个数). 请实现数据结构和算法来 ...

  7. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  8. Codeforces Round #401 (Div. 1) C(set+树状数组)

    题意: 给出一个序列,给出一个k,要求给出一个划分方案,使得连续区间内不同的数不超过k个,问划分的最少区间个数,输出时将k=1~n的答案都输出 比赛的时候想的有点偏,然后写了个nlog^2n的做法,T ...

  9. 数据结构--树状数组

    文章目录 1. 树状数组 2. 单点修改 3. 区间修改 4. 完整代码 5. 参考文献 1. 树状数组 类似数据结构:线段树(Segment Tree) 树状数组 跟 线段树 的区别: 树状数组能做 ...

最新文章

  1. 【二级java】排序技术
  2. 求难、求拙、求慢、求少
  3. sqlplus操作--文件的输入与输出
  4. flask mysql项目模板渲染_Flask框架模板渲染操作简单示例
  5. 数据科学与python语言——Matplotlib数据可视化基础
  6. 「网络流24题」 题目列表
  7. 启动kafka报错:__consumer_offsets-22\00000000000000000000.index.swap: 另一个程序正在使用此文件,进程无法访问。
  8. 打表找规律-灯泡状态数
  9. 写一个函数将传入的字符串转换成驼峰表示法
  10. shell将脚本输出结果记录到日志文件
  11. 未来教育 · 软件破解
  12. AutoLayout源码解析(1)
  13. AMS:startActivity桌面启动应用
  14. DirectX--给视频加马赛克、字符OSD
  15. python实际应用2-拆分PDF
  16. 山重水复疑无路,最快下降问梯度(深度学习入门系列之七)
  17. win10卸载软件通过控制面板
  18. DOS和Debug常用命令
  19. aquarius_v13
  20. 根 ssl 2668 优美的暴力

热门文章

  1. python的字符串内建函数
  2. 如何调整自定义标签样式
  3. 《Java技术》第二次作业计科1501赵健宇
  4. 福昕熊雨前:PDFium开源项目的背后
  5. Sharepoint 2013 发布功能(Publishing features)
  6. ORACLE连接数据库(备忘)
  7. hdu1053 Entropy hdu2527 Safe Or Unsafe
  8. SQL Server 2005 DTS导入平面数据
  9. mootools框架【十】-mootools深层探讨
  10. javafx android sdk,JavaFX打包到Android上