Little Artem and Time Machine

CodeForces - 669E

题目大意:有三种操作

1。在时间x位置y上+1;

2。在时间x位置y上-1;

3。查询时间x位置y上的值;

解题思路:对于每个查询我们将原来的问题转化为偏序问题,即对于每一个查询,我们需要统计输入顺序小于当前顺序&&时间小于当前x的y的值。即(输入顺序,时间,值);

输入顺序已经有序。题目保证时间不同。

ps:cdq里边套用sort会很麻,但是很方便,另一种处理方法是在cdq的过程中对x归并左右两边的序列来保证左右两边时间有序。

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long
#define N 200005
#define inf 0x3f3f3f3f
#define sca(n) scanf("%d",&n)
#define pb(x) push_back(x)
struct node
{int op,x,y,id;
}p[N];vector<int>V;
vector<int>V1;bool cmp(node a,node b)
{return a.x<b.x;
}int sum[N];
int ou[N];
void cdq(int l,int r)
{if(l==r)return ;int m=(l+r)>>1;cdq(l,m),cdq(m+1,r);sort(p+l,p+m+1,cmp );sort(p+1+m,p+r+1,cmp );int R=m+1;int L=l;for( ;R<=r;R++){while(L<=m&&((p[L].x<p[R].x)||p[L].op==3)){if(p[L].op==1)sum[p[L].y]++;if(p[L].op==2)sum[p[L].y]--;L++;}if(p[R].op==3)ou[p[R].id]+=sum[p[R].y];}for(int i=l;i<L;i++){if(p[i].op==1)sum[p[i].y]--;if(p[i].op==2)sum[p[i].y]++;}
}
int main()
{int n;scanf("%d",&n);int op,a,b;int id=0;for(int i=1;i<=n;i++){scanf("%d%d%d",&op,&a,&b);if(op==3)id++;p[i]=node{op,a,b,id};V.pb(b);V1.pb(a);}sort(V1.begin(),V1.end());sort(V.begin(),V.end());unique(V1.begin(),V1.end());unique(V.begin(),V.end());for(int i=1;i<=n;i++){p[i].x=lower_bound(V1.begin(),V1.end(),p[i].x)-V1.begin();p[i].y=lower_bound(V.begin(),V.end(),p[i].y)-V.begin();}cdq(1,n);for(int i=1;i<=id;i++)printf("%d\n",ou[i]);
}

CodeForces - 669E ​​​​​​​ Little Artem and Time Machine (cdq分治)相关推荐

  1. CodeForces - 641ELittle Artem and Time Machine——map+树状数组

    [题目描述] CodeForces - 641ELittle Artem and Time Machine [题目分析] 题目的意思大概是有三种操作 1.在时间t加入一个数字x 2.在时间t删除一个数 ...

  2. [codeforces 1333A] Little Artem 读懂题+找规律+多举例

    Codeforces Round #632 (Div. 2)   比赛人数12810 [codeforces 1333A]   Little Artem   读懂题+找规律+多举例 总目录详见http ...

  3. Radio stations CodeForces - 762E (cdq分治)

    大意: 给定$n$个三元组$(x,r,f)$, 求所有对$(i,j)$, 满足$i<j, |f_i-f_j|\le k, min(r_i,r_j)\ge |x_i-x_j|$ 按$r$降序排, ...

  4. codeforces 762E(cdq分治)

    题意: n个电台,每个电台有三个属性xi, ri, fi.分别代表电台的坐标,电台的播报范围,以及播报的频率. 对于一对电台i, j,若min(ri, rj) >= |xi - xj|,那么他们 ...

  5. 【CF603E】Pastoral Oddities cdq分治+并查集

    [CF603E]Pastoral Oddities 题意:有n个点,依次加入m条边权为$l_i$的无向边,每次加入后询问:当前图是否存在一个生成子图,满足所有点的度数都是奇数.如果有,输出这个生成子图 ...

  6. [偏序关系与CDQ分治]【学习笔记】

    组合数学真是太棒了 $CDQ$真是太棒了(雾 参考资料: 1.<组合数学> 2.论文 课件 很容易查到 3.sro __stdcall 偏序关系 关系: 集合$X$上的关系是$X$与$X$ ...

  7. 【BZOJ-3456】城市规划 CDQ分治 + NTT

    题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3456 Solution 这个问题可以考虑dp,利用补集思想 N个点的简单图总数量为$2^{ ...

  8. BZOJ 1176: [Balkan2007]Mokia( CDQ分治 + 树状数组 )

    考虑cdq分治, 对于[l, r)递归[l, m), [m, r); 然后计算[l, m)的操作对[m, r)中询问的影响就可以了. 具体就是差分答案+排序+离散化然后树状数组维护.操作数为M的话时间 ...

  9. bzoj2961 共点圆 (CDQ分治, 凸包)

    /* 可以发现可行的圆心相对于我们要查询的点是在一个半平面上, 然后我们要做的就是动态维护凸壳然后用这个半平面去切它 看看是否是在合法的那一面然后cdq分治就可以了代码基本是抄的,*/#include ...

最新文章

  1. eclipse定制化配置调优、初始化配置指南、可以解决启动慢等问题
  2. 静态html引入js添加随机数后缀防止缓存
  3. MySQL 对查询结果进行排序
  4. 查找数据库大小和表大小
  5. Python+matplotlib数据可视化设置图例3个精选案例
  6. gis计算机信息技术,信息技术(IT)对GIS的影响
  7. Spring(二)、注解IOC
  8. 黑苹果 2分钟 重启_一分钟了解苹果iPad Pro 2020的激光雷达到底是什么黑科技?...
  9. 适时突破[我眼中的戴尔转型]
  10. 计算机编码--3.GB2312与GBK
  11. android禁止录屏后键盘,怎样取消华为按键录屏功能 | 手游网游页游攻略大全
  12. 常见的java毕业设计_php毕业设计题目汇总
  13. 如何升级npm管理的各依赖版本
  14. Mac Pro install peel
  15. 开源AI迷你版apache
  16. github优秀项目源码汇总---Android
  17. discuz mysql类_Discuz X2二次开发之数据库操作 DB类
  18. c语言 简化乘法,简单的C语言移位计算整形乘法和除法值
  19. 魔兽争霸3 for Mac 汉化版 即时战略游戏 支持M1
  20. Linux系统之间的文件共享

热门文章

  1. plsql 数据库密码过期修改(转)
  2. 慧通教育——python进阶习题第一关(二)
  3. 盈建科弹性板6计算_YJK计算参数(注释)2017年度
  4. linux下C++开发
  5. 深耕品质,腾讯WeTest《2018中国移动游戏质量白皮书》正式发布
  6. 怎么改服务器配置文件,服务器怎样设置 服务器设置教程详解【图文】
  7. C语言文件读写操作(详解)
  8. 建造者2全部岛屿_《勇者斗恶龙:建造者2》公布新岛屿和人物
  9. 荔枝派zero开发01 —— 交叉编译的配置
  10. Alibaba Dubbo or Apache Dubbo, 该如何做选择呢?