poj 2892 Tunnel Warfare(线段树#5/树状数组)
来源:互联网 发布:尼古丁口香糖 知乎 编辑:程序博客网 时间:2024/05/17 08:11
维护一个表,能够插入和删除,并且能够对某一点求前驱和后继。
方法一:线段树 422ms
#include <cstdio>#include <cstring>#include <stack> #include <set>#include <algorithm> #define N 50010using namespace std; stack<int> st; int n, m; int main(){ char op[3]; int x; //FILE * fp = fopen("in.txt", "r"); scanf( "%d %d", &n, &m); set<int> v; while (m--) { scanf( "%s", op); if (op[0] == 'D') { scanf( "%d", &x); st.push(x); v.insert(x); } else if (op[0] == 'R') { int cc = st.top(); st.pop(); v.erase(cc); } else { scanf( "%d", &x); int ans; if (v.count(x) == 1)ans = 0; else if (v.size() == 0) ans = n; else { int l, r; set<int>::iterator it = v.upper_bound(x); if (it == v.end())r = n + 1, l = (*(--it)), ans = (r - l - 1); else if (it == v.begin())r = (*it), l = 0, ans = (r - l - 1); else { set<int>::iterator itt = (--it); it++; ans = (*it - *itt - 1); } } printf("%d", ans); if (m)puts(""); } } // getchar(); return 0;}
#include <cstdio>#include <cstring>#include <stack> #include <set>#include <algorithm> #define N 50010using namespace std; stack<int> st; int n, m; int main(){ char op[3]; int x; //FILE * fp = fopen("in.txt", "r"); scanf( "%d %d", &n, &m); set<int> v; while (m--) { scanf( "%s", op); if (op[0] == 'D') { scanf( "%d", &x); st.push(x); v.insert(x); } else if (op[0] == 'R') { int cc = st.top(); st.pop(); v.erase(cc); } else { scanf( "%d", &x); int ans; if (v.count(x) == 1)ans = 0; else if (v.size() == 0) ans = n; else { int l, r; set<int>::iterator it = v.upper_bound(x); if (it == v.end())r = n + 1, l = (*(--it)), ans = (r - l - 1); else if (it == v.begin())r = (*it), l = 0, ans = (r - l - 1); else { set<int>::iterator itt = (--it); it++; ans = (*it - *itt - 1); } } printf("%d", ans); if (m)puts(""); } } // getchar(); return 0;}
法三:树状数组+二分查找 这个懒得写了
- poj 2892 Tunnel Warfare(线段树#5/树状数组)
- POJ-2892 Tunnel Warfare 树状数组
- POJ 2892 Tunnel Warfare (树状数组+二分)
- POJ 2892 Tunnel Warfare [树状数组]
- 【poj 2892】Tunnel Warfare 二分+树状数组
- poj 2892 Tunnel Warfare(树状数组+二分)
- poj 2892 Tunnel Warfare(线段树)
- POJ-2892-Tunnel Warfare(线段树)
- POJ 2892 Tunnel Warfare (线段树)
- 【POJ 2892】 Tunnel Warfare(树状数组+二分)
- poj 2892 Tunnel Warfare(树状数组+二分)
- POJ 2892 Tunnel Warfare && HDOJ 1540 (线段树)
- POJ 2892 Tunnel Warfare 区间合并线段树
- poj 2892 Tunnel Warfare(线段树…
- POJ 2892 & HDU 1540 Tunnel Warfare (线段树)
- POJ--2892--Tunnel Warfare【线段树】区间合并
- hdu 1540 & poj 2892 Tunnel Warfare 线段树区间合并
- hdu 1540/POJ 2892 Tunnel Warfare 【线段树区间合并】
- 2012暑期多校8总结
- hdu2289 二分法 圆台体积
- POJ 2778 DNA Sequence
- SVN中Branch/tag
- hdu 4357 String Change
- poj 2892 Tunnel Warfare(线段树#5/树状数组)
- UML进行Linux内核调试 --1 环境搭建
- 私有构造函数 私有析构函数
- Swing组件的基类JComponent实现滚动到可视区域和JTREE展开(不展开子节点)
- new,delete和malloc,free的区别
- 新学期个人作息时间安排
- 漂亮实用的万年历带中文节日农历
- MFC学习之 ListCtrl 控件的用法
- hdu 4004 The Frog's Games