【POJ】2892 Tunnel Warfare
【算法】平衡树(treap)
【题解】treap知识见数据结构
在POJ把语言从G++换成C++就过了……???
#include<cstdio>
#include<algorithm>
#include<ctime>
using namespace std;
const int maxn=;
struct cyc{int num,w,rnd,l,r;}t[maxn*];
int n,m,root,sz,s,tt,d[maxn];
void rr(int &tt)//右旋
{
int k=t[tt].l;
t[tt].l=t[k].r;
t[k].r=tt;
tt=k;
}
void lr(int &tt)
{
int k=t[tt].r;
t[tt].r=t[k].l;
t[k].l=tt;
tt=k;
}
void insert(int &w,int x)
{
if(w==)
{
w=++sz;
t[w].num=x;
t[w].w=;
t[w].rnd=rand();
return;
}
if(t[w].num==x){t[w].w++;return;};
if(x<t[w].num)
{
insert(t[w].l,x);
if(t[t[w].l].rnd<t[w].rnd)rr(w);
}
if(x>t[w].num)
{
insert(t[w].r,x);
if(t[t[w].r].rnd<t[w].rnd)lr(w);
}
}
void del(int &w,int x)
{
if(t[w].num==x)
{
if(t[w].w>)
{
t[w].w--;
return;
}
if(t[w].l*t[w].r==)w=t[w].l+t[w].r;//如果只有一颗子树,用这颗子树代替这个节点就可以删除了(没有子树则是用0代替之)。
else
if(t[t[w].l].rnd<t[t[w].r].rnd)
{
rr(w);
// del(t[w].r,x);
del(w,x);
}
else
{
lr(w);
// del(t[w].l,x);
del(w,x);
}
}
else if(t[w].num<x)del(t[w].r,x);
else del(t[w].l,x);
}
void find(int w,int x)
{
if(w==)return;
if(t[w].num>=x&&t[w].num<tt)tt=t[w].num;
if(t[w].num<=x&&t[w].num>s)s=t[w].num;
if(t[w].num>x)find(t[w].l,x);
if(t[w].num<x)find(t[w].r,x);
}
int main()
{
srand(time());
scanf("%d%d",&n,&m);
for(int i=,j=;i<=m;i++)
{
// printf("[]");
char c=getchar();int x;
c=getchar();//printf("[c=%c]",c);
// while(c<'A'&&c>'Z')c=getchar();
if(c=='D')
{
scanf("%d",&x);
insert(root,x);
d[++j]=x;
}
if(c=='R')del(root,d[j--]);
if(c=='Q')
{
s=,tt=n+;
scanf("%d",&x);
find(root,x);
if(s==tt)printf("0\n");
else printf("%d\n",tt-s-);
}
}
return ;
}
【POJ】2892 Tunnel Warfare的更多相关文章
- 【HDOJ】1540 Tunnel Warfare
还不错的一道线段树区间合并.挺巧妙的用法. /* 1540 */ #include <iostream> #include <string> #include <map& ...
- 【POJ】1704 Georgia and Bob(Staircase Nim)
Description Georgia and Bob decide to play a self-invented game. They draw a row of grids on paper, ...
- 【POJ】1067 取石子游戏(博弈论)
Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- hdu 1540/POJ 2892 Tunnel Warfare 【线段树区间合并】
Tunnel Warfare Time Limit: 4000/2000 MS ...
- POJ 2892 Tunnel Warfare(线段树单点更新区间合并)
Tunnel Warfare Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 7876 Accepted: 3259 D ...
- poj 2892 Tunnel Warfare(线段树)
Tunnel Warfare Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 7499 Accepted: 3096 D ...
- 【BZOJ】【1986】【USACO 2004 Dec】/【POJ】【2373】划区灌溉
DP/单调队列优化 首先不考虑奶牛的喜欢区间,dp方程当然是比较显然的:$ f[i]=min(f[k])+1,i-2*b \leq k \leq i-2*a $ 当然这里的$i$和$k$都是偶数啦~ ...
- 【POJ】【2104】区间第K大
可持久化线段树 可持久化线段树是一种神奇的数据结构,它跟我们原来常用的线段树不同,它每次更新是不更改原来数据的,而是新开节点,维护它的历史版本,实现“可持久化”.(当然视情况也会有需要修改的时候) 可 ...
- 【POJ】1222 EXTENDED LIGHTS OUT
[算法]高斯消元 [题解] 高斯消元经典题型:异或方程组 poj 1222 高斯消元详解 异或相当于相加后mod2 异或方程组就是把加减消元全部改为异或. 异或性质:00 11为假,01 10为真.与 ...
随机推荐
- python循环解码base64
第一次写博客,都不知道该如何下手,写的不是很好,还望各位大佬不要喷我. 先来介绍一下base64: Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打 ...
- 一个比较典型的WMI查询
Get-WmiObject win32_bios -ComputerName server1, server2 | Format-Table ` @{n='Hostname';e={$_.__serv ...
- MATLAN中矩阵表示中有一维是~表示的意思
[~,m]表示的意思解释. [~,m]=rat(12/34) m = 17 >> [x,m]=rat(12/34) x = 6 m = 17
- bzoj4501 旅行
题面: 小C来到了F国,小C想好好地参观F国.F国可以看一个有n个点m条边的有向无环图,小C刚开始站在1号点.假设现在小C站在x号点: 1.点x没有出边,结束旅游. 2.点x有o条出边,小C等概率地选 ...
- CentOS 文件及目录等
1.在linux中一切皆是文件,只是类型不同,通过ls -l看到的一个字母表示文件的类型 -:普通文件. d:目录文件. l:链接文件. b:块设备文件. c:字符设备文件. p:管道文件. 2.文件 ...
- [CEOI2004]锯木厂选址 斜率优化DP
斜率优化DP 先考虑朴素DP方程, f[i][k]代表第k个厂建在i棵树那里的最小代价,最后答案为f[n+1][3]; f[i][k]=min(f[j][k-1] + 把j+1~i的树都运到i的代价) ...
- Android 使用LocationManger进行定位
在Android应用中,往往有获取当前地理位置的需求,比如微信获取附近的人需要获取用户当前的位置,不多说,直接上例子. public Location getLocation() { Location ...
- BZOJ1878:[SDOI2009]HH的项链——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 题面源于洛谷 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的 ...
- 第13届 广东工业大学ACM程序设计大赛 C题 平分游戏
第13届 广东工业大学ACM程序设计大赛 C题 平分游戏 题目描述 转眼间又过了一年,又有一届的师兄师姐要毕业了. 有些师兄师姐就去了景驰科技实习. 在景驰,员工是他们最宝贵的财富.只有把每一个人 ...
- iOS开发ARC机制下的内存管理技术要点
转载一篇: iOS开发ARC内存管理技术要点.ARC内存管理原则总结.iOS ARC内存管理总结 ARC内存管理机制 (一)ARC的判断准则: 只要没有任何一个强指针指向该对象,该对象就会被释放. ( ...