题目传送门

题意:中文题面

分析:隔了一个考试周再做,开始没有什么思路,感觉能用线段树/树状数组维护,树状数组维护最小值不会去写线段树,结果超时.后来发现只要维护前缀几个人以及用优先队列/set维护最小忍受值,加上队列编号pop就能实现全部功能了.

//#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#include <map>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std; typedef long long ll;
typedef pair<int, int> P;
const int N = 1e5 + 5;
const int INF = 0x3f3f3f3f;
struct BIT {
int sum[N], sz;
void init(int n) {
sz = n;
memset (sum, 0, sizeof (sum));
}
void updata(int i, int x) {
while (i <= sz) {
sum[i] += x;
i += i & (-i);
}
}
int query(int i) {
int ret = 0;
while (i > 0) {
ret += sum[i]; i -= i & (-i);
}
return ret;
}
}bit;
bool vis[N]; int main(void) {
int T;
while (scanf ("%d", &T) == 1) {
priority_queue<P, vector<P>, greater<P> > que; map<int, int> id;
char str[10]; int left = 1, right = 0, n = 100000;
bit.init (n);
memset (vis, false, sizeof (vis));
while (T--) {
scanf ("%s", &str);
if (str[0] == 'a') {
int a, b; scanf ("%d%d", &a, &b);
id[a] = ++right;
que.push (make_pair (b, id[a]));
bit.updata (id[a], 1);
}
else if (str[0] == 'c') {
int x, y; scanf ("%d%d", &x, &y);
if (id[x] < 1 || id[x] > right || vis[id[x]]) continue;
int num = bit.query (id[x] - 1);
printf ("%d\n", num);
if (num > y) {
vis[id[x]] = true;
bit.updata (id[x], -1);
}
}
else if (str[0] == 'l') {
while (!que.empty ()) {
P p = que.top (); que.pop ();
int aa = p.second, bb = p.first;
if (vis[aa]) continue;
vis[aa] = true;
bit.updata (aa, -1);
break;
}
}
else if (str[0] == 'p') {
while (left <= right && vis[left]) left++;
if (left > right) continue;
vis[left] = true;
bit.updata (left, -1);
left++;
}
}
} return 0;
}

  

树状数组+STL FZU 2029 买票问题的更多相关文章

  1. FZU 2029 买票问题 树状数组+STL

    题目链接:买票问题 思路:优先队列维护忍耐度最低的人在队首,leave操作ok. vis数组记录从1到n的编号的人们是不是在队列中,top维护队首的人的编号.pop操作搞定. 然后,check操作就是 ...

  2. FZU Problem 2029 买票问题(树状数组)

    当我看到题目是5秒的时候,压根没有想树状数组,一直奔着模拟队列去想了,最后也没搞定,赛后看到大神的题解才恍然大悟,原来如此,题目中有明显的暗示,求前n项和,骤然感叹,自己太low... 果然还是要多做 ...

  3. POJ 2029 Get Many Persimmon Trees (二维树状数组)

    Get Many Persimmon Trees Time Limit:1000MS    Memory Limit:30000KB    64bit IO Format:%I64d & %I ...

  4. P2161 [SHOI2009]会场预约[线段树/树状数组+二分/STL]

    题目描述 PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地.这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突.也就是说,前一个 ...

  5. poj 2029 二维树状数组

    思路:简单树状数组 #include<map> #include<set> #include<cmath> #include<queue> #inclu ...

  6. POJ 2029 Get Many Persimmon Trees(DP||二维树状数组)

    题目链接 题意 : 给你每个柿子树的位置,给你已知长宽的矩形,让这个矩形包含最多的柿子树.输出数目 思路 :数据不是很大,暴力一下就行,也可以用二维树状数组来做. #include <stdio ...

  7. FZU 2176 easy problem (DFS序+树状数组)

    对于一颗树,dfs遍历为每个节点标号,在进入一个树是标号和在遍历完这个树的子树后标号,那么子树所有的标号都在这两个数之间,是一个连续的区间.(好神奇~~~) 这样每次操作一个结点的子树时,在每个点的开 ...

  8. FZU 2225 小茗的魔法阵 扫描线+树状数组

    这个题和一个CF上的找"Z"的题差不多,都是扫描线+树状数组 从右上角的主对角线开始扫描,一直扫到左下角,每次更新,右延伸等于该扫描线的点,注意在其所在的树状数组更新就好了 时间复 ...

  9. POJ 2029 Get Many Persimmon Trees (模板题)【二维树状数组】

    <题目链接> 题目大意: 给你一个H*W的矩阵,再告诉你有n个坐标有点,问你一个w*h的小矩阵最多能够包括多少个点. 解题分析:二维树状数组模板题. #include <cstdio ...

随机推荐

  1. asp.net 后台获取input的值

    前台:<input id="test" value="" runat="server" /> 只要架上runat="s ...

  2. MongoDB配置文件YAML-based选项全解

    配置文件部分 MongoDB引入一个YAML-based格式的配置文件.2.4版本以前的仍然兼容. 我的mongodb配置文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  3. 3DS MAX调慢摄像机动画

    在3ds max的右下角找到时间配置,然后出现该对话框,然后调整结束时间,将原来的时间翻倍,就能够是摄像机动画变慢. 下图的旋转速度比上图慢一半.

  4. Warp divergence

    Threads are executed in warps of 32, with all threads in the warp executing the same instruction at ...

  5. iOS 动态计算文本内容的高度

    关于ios 下动态计算文本内容的高度,经过查阅和网上搜素,现在看到的有以下几种方法: 1. //  获取字符串的大小  ios6 - (CGSize)getStringRect_:(NSString* ...

  6. 杨辉三角用java实现

    代码如下: public class ErArray { public static void main(String[] args) { //杨辉三角 int[][] num = new int[1 ...

  7. tomcat和apache区别联系

    tomcat和apache区别联系 Apache是普通服务器,本身只支持html即普通网页.不过可以通过插件支持php,还可以与Tomcat连通(单向Apache连接Tomcat, 就是说通过Apac ...

  8. EVE ToDo

    1. 打捞无人机 2. 无人机命中

  9. 384. Shuffle an Array

    Shuffle a set of numbers without duplicates. Example: // Init an array with set 1, 2, and 3. int[] n ...

  10. JS中级 - 02:表单、表格

    getElementsByTagName() getElementsByTagName() 方法可返回带有指定标签名的对象的集合. getElementsByClassName() 返回文档中所有指定 ...