题目传送门

题意:现在有3种操作,

1 t x 在t秒往multiset里面插入一个x

2 t x 在t秒从multiset里面删除一个x

3 t x 在t秒查询multiset里面有多少x

事情是按照输入顺序发生的,这个人有一个时光机,可以穿梭到那一秒去执行操作。

题解:CDQ分治。3维偏序,第一维是输入顺序,第二维t,然后直接map处理数据就好了。

代码:

 #include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod = (int)1e9+;
const int N = 1e5 + ;
struct Node{
int op, t, m, id;
bool operator < (const Node & x){
return t < x.t;
}
}A[N], tmp[N];
int ans[N];
map<int,int> mp;
void cdq(int l, int r){
if(l >= r) return ;
int mid = l + r >> ;
cdq(l, mid);
cdq(mid+, r);
int top = , tl = l, tr = mid + ;
while(tl <= mid && tr <= r){
if(A[tl].t <= A[tr].t){
tmp[++top] = A[tl++];
}
else tmp[++top] = A[tr++];
}
while(tl <= mid){
tmp[++top] = A[tl++];
}
while(tr <= r){
tmp[++top] = A[tr++];
}
for(int i = ; i <= top; i++){
int id = tmp[i].id, op = tmp[i].op;
int m = tmp[i].m;
if(id <= mid && op != ){
if(op == ) mp[m]++;
else mp[m]--;
}
else if(id > mid && op == ){
ans[id] += mp[m];
}
A[l+i-] = tmp[i];
}
for(int i = ; i <= top; i++){
int id = tmp[i].id, op = tmp[i].op;
int m = tmp[i].m;
if(id <= mid && op != ){
if(op == ) mp[m]--;
else mp[m]++;
}
}
}
int main(){
int n;
scanf("%d", &n);
memset(ans, -, sizeof(ans));
for(int i = ; i <= n; i++){
scanf("%d%d%d", &A[i].op, &A[i].t, &A[i].m);
A[i].id = i;
if(A[i].op == ) ans[i] = ;
}
cdq(,n);
for(int i = ; i <= n; i++){
if(ans[i] == -) continue;
printf("%d\n", ans[i]);
}
return ;
}

CodeForces 669 E Little Artem and Time Machine CDQ分治的更多相关文章

  1. codeforces 669E E. Little Artem and Time Machine(节点为map型的线段树)

    题目链接: E. Little Artem and Time Machine time limit per test 2 seconds memory limit per test 256 megab ...

  2. Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) E. Little Artem and Time Machine 树状数组

    E. Little Artem and Time Machine 题目连接: http://www.codeforces.com/contest/669/problem/E Description L ...

  3. hdu 3842 Machine Works(cdq分治维护凸壳)

    题目链接:hdu 3842 Machine Works 详细题解: HDU 3842 Machine Works cdq分治 斜率优化 细节比较多,好好体会一下. 在维护斜率的时候要考虑x1与x2是否 ...

  4. Codeforces 1093E Intersection of Permutations [CDQ分治]

    洛谷 Codeforces 思路 一开始想到莫队+bitset,发现要T. 再想到分块+bitset,脑子一抽竟然直接开始写了,当然也T了. 最后发现这就是个裸的CDQ分治-- 发现\(a\)不变,可 ...

  5. Codeforces 1045G AI robots [CDQ分治]

    洛谷 Codeforces 简单的CDQ分治题. 由于对话要求互相看见,无法简单地用树套树切掉,考虑CDQ分治. 按视野从大到小排序,这样只要右边能看见左边就可以保证互相看见. 发现\(K\)固定,那 ...

  6. Codeforces 848C Goodbye Souvenir [CDQ分治,二维数点]

    洛谷 Codeforces 这题我写了四种做法-- 思路 不管做法怎样,思路都是一样的. 好吧,其实不一样,有细微的差别. 第一种 考虑位置\(x\)对区间\([l,r]\)有\(\pm x\)的贡献 ...

  7. Codeforces 526F Pudding Monsters - CDQ分治 - 桶排序

    In this problem you will meet the simplified model of game Pudding Monsters. An important process in ...

  8. Codeforces 848C (cdq分治)

    Codeforces 848C Goodbye Souvenir Problem : 给一个长度为n的序列,有q个询问.一种询问是修改某个位置的数,另一种询问是询问一段区间,对于每一种值出现的最右端点 ...

  9. Educational Codeforces Round 41 967 E. Tufurama (CDQ分治 求 二维点数)

    Educational Codeforces Round 41 (Rated for Div. 2) E. Tufurama (CDQ分治 求 二维点数) time limit per test 2 ...

随机推荐

  1. 【iOS】[[NSBundle mainBundle] loadNibNamed:nibTitle owner:self options:nil] 异常

    这两天照书上的例子写代码时,出现了这个异常. 上网查了不少,有人说链接失效什么的……但发现都不是那些原因,问题出现在下面这句代码: [[NSBundle mainBundle] loadNibName ...

  2. 【Algorithm】选择排序法

    简单的选择排序法思想: * 首先找到数组中最小的元素,将它和数组第一个元素互换位置(如果第一个元素就是最小那么它就和自己交换). * 其次,在剩下的元素中找到最小的元素,将它与数组的第二个元素互换位置 ...

  3. 【Java例题】1.1计算n的阶乘

    package study; import java.util.*; import java.math.*; public class myClass { public static void mai ...

  4. WEB基础(一)--JSP的9个内置对象

    1.request request 对象是 javax.servlet.httpServletRequest类型的对象. 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据. ...

  5. Flink 源码解析 —— 如何获取 ExecutionGraph ?

    https://t.zsxq.com/UnA2jIi 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- Mac 上搭建 Flink 1.6. ...

  6. alluxio2.0特性-预览

    项目地址 https://github.com/Alluxio/alluxio/tree/branch-2.0-preview 2.0版本-构思和设计 支持超大规模数据工作负载 Alluxio作为计算 ...

  7. requestAnimationFrame 兼容方案

    [toc] 编写涉及:css, html, js 在线演示codepen html代码 <div class="roll-box"> <div class=&qu ...

  8. intellij idea与github整合管理代码

    各位看官大家好,博主每每在公司学习新知识写代码时都需要通过U盘带回家来继续每天的学习,觉得这样实在麻烦,于是今天就整合了一下github来完成代码的管理. 开始之前我们需要准备三样东西:1.intel ...

  9. testng学习笔记-- 场景和module

    一.定义 TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便. TestNG是一个开源自动化测试框架;TestNG表示下一代(Next Ge ...

  10. 解决MobaXterm-SSH中文乱码问题

    一般情况不用修改服务器字符集(linux或unix服务器字符集一般不会设置错误). 1.首先用命令查看当前系统的LANG是什么: >locale LANG=en_US LC_COLLATE=&q ...