ACdream 1157 Segments
Segments
This problem will be judged on ACdream. Original ID: 1157
64-bit integer IO format: %lld Java class name: (No Java Yet)
由3钟类型操作:
1)D L R(1 <= L <= R <= 1000000000) 增加一条线段[L,R]
2)C i (1-base) 删除第i条增加的线段,保证每条插入线段最多插入一次,且这次删除操作一定合法
3) Q L R(1 <= L <= R <= 1000000000) 查询目前存在的线段中有多少条线段完全包含[L,R]这个线段,线段X被线段Y完全包含即LY <= LX
<= RX <= RY)
给出N,接下来N行,每行是3种类型之一
Input
多组数据,每组数据N
接下来N行,每行是三种操作之一(1 <= N <= 10^5)
Output
Sample Input
6
D 1 100
D 3 8
D 4 10
Q 3 8
C 1
Q 3 8
Sample Output
2
1
Hint
注意,删除第i条增加的线段,不是说第i行,而是说第i次增加。
比如
D 1 10
Q 1 10
D 2 3
D 3 4
Q 5 6
D 5 6
C 2是删除D 2 3
C 4是删除D 5 6
Source
#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
struct QU{
int l,r,id,v;
bool operator<(const QU &t) const{
if(r != t.r) return r > t.r;
if(l != t.l) return l < t.l;
return id < t.id;
}
bool operator>(const QU &t) const{
return id < t.id;
}
}Q[maxn];
int bit[maxn],Li[maxn],ans[maxn],tot,n;
void update(int i,int val){
for(; i <= tot; i += i&(-i))
bit[i] += val;
}
int sum(int i,int ret = ){
for(; i > ; i -= i&(-i))
ret += bit[i];
return ret;
}
int d[maxn],cnt;
void cdq(int L,int R){
if(R <= L) return;
int mid = (L + R)>>;
cdq(L,mid);
cdq(mid+,R);
sort(Q+L,Q+R+);
for(int i = L; i <= R; ++i){
if(Q[i].id <= mid && Q[i].v) update(Q[i].l,Q[i].v);
if(Q[i].id > mid && !Q[i].v) ans[Q[i].id] += sum(Q[i].l);
}
for(int i = L; i <= R; ++i)
if(Q[i].id <= mid && Q[i].v) update(Q[i].l,-Q[i].v);
}
int main(){
char op[];
while(~scanf("%d",&n)){
memset(bit,,sizeof bit);
memset(ans,,sizeof ans);
for(int i = cnt = tot = ; i < n; ++i){
scanf("%s",op);
Q[i].id = i;
if(op[] == 'D'){
scanf("%d%d",&Q[i].l,&Q[i].r);
d[cnt++] = i;
Q[i].v = ;
Li[tot++] = Q[i].l;
Li[tot++] = Q[i].r;
}else if(op[] == 'Q'){
scanf("%d%d",&Q[i].l,&Q[i].r);
Q[i].v = ;
Li[tot++] = Q[i].l;
Li[tot++] = Q[i].r;
}else{
scanf("%d",&Q[i].l);
Q[i].r = Q[d[Q[i].l-]].r;
Q[i].l = Q[d[Q[i].l-]].l;
Q[i].v = -;
}
}
sort(Li,Li + tot);
tot = unique(Li, Li + tot) - Li;
for(int i = ; i < n; ++i){
Q[i].l = lower_bound(Li, Li + tot,Q[i].l) - Li + ;
Q[i].r = lower_bound(Li, Li + tot,Q[i].r) - Li + ;
}
cdq(,n-);
sort(Q,Q+n,greater<QU>());
for(int i = ; i < n; ++i)
if(!Q[i].v) printf("%d\n",ans[Q[i].id]);
}
return ;
}
ACdream 1157 Segments的更多相关文章
- ACdream 1157 Segments(CDQ分治)
题目链接:http://acdream.info/problem?pid=1157 Problem Description 由3钟类型操作:1)D L R(1 <= L <= R < ...
- ACdream 1157 Segments CDQ分治
题目链接:https://vjudge.net/problem/ACdream-1157 题意: Problem Description 由3钟类型操作: 1)D L R(1 <= L < ...
- 【ACdream】1157 Segments cdq分治
Segments Problem Description 由3钟类型操作:1)D L R(1 <= L <= R <= 1000000000) 增加一条线段[L,R]2)C i ...
- ACdream 1157 (cdq分治)
题目链接 Segments Time Limit: 4000/2000MS (Java/Others)Memory Limit: 20000/10000KB (Java/Others) Problem ...
- [LeetCode] Number of Segments in a String 字符串中的分段数量
Count the number of segments in a string, where a segment is defined to be a contiguous sequence of ...
- Greenplum记录(一):主体结构、master、segments节点、interconnect、performance monitor
结构:Client--master host--interconnect--segment host 每个节点都是单独的PG数据库,要获得最佳的性能需要对每个节点进行独立优化. master上不包含任 ...
- Application package 'AndroidManifest.xml' must have a minimum of 2 segments.
看了源码就是packagename里面必须包含一个. 源码在: ./sdk/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/id ...
- segments&cache
Segments 执行效果 命令 在 sense 里边执行 GET /abcd/_segments 前边的是索引名称,后边是请求 段信息 说明 索引是面向分片的,是由于索引是由一个或多个分片( ...
- [UCSD白板题] Points and Segments
Problem Introduction The goal in this problem is given a set of segments on a line and a set of poin ...
随机推荐
- centos solr 集群搭建
一.什么是 SolrCloud SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时 ...
- “王者对战”之 MySQL 8 vs PostgreSQL 10
既然 MySQL 8 和 PostgreSQL 10 已经发布了,现在是时候回顾一下这两大开源关系型数据库是如何彼此竞争的. 在这些版本之前,人们普遍认为,Postgres 在功能集表现更出色,也因其 ...
- BA-siemens-点位类型表
X(超级点) 输入 0-10v 4-20ma(不可用) Ni 1000 Pt 1000 10k & 100k 热敏电阻 数字输入 脉冲计数输入 输出 0-10v 4-20ma(不可用) 数字 ...
- 香蕉派 Banana pi BPI-M2 四核开源单板计算机.
Banana PI BPI-M2 是一款四核高性能单板计算机,Banana PI BPI-M2是一款比树莓派更强悍的四核Android4.4产品. Banana PI BPI-M2兼容性强大,能 ...
- BZOJ:3441 乌鸦喝水
bzoj:3441 乌鸦喝水 题目传送门 Description 一只乌鸦在自娱自乐,它在面前放了n个有魔力的水缸,水缸里装有无限的水. 他准备从第1个水缸飞到第n个水缸,共m次.在飞过一个水缸的过程 ...
- mysql事务的开启
mysql事务的开启 对于一个MYSQL数据库(InnoDB),事务的开启与提交模式无非下面这两种情况: 1>若参数autocommit=0,事务则在用户本次对数据进行操作时自动开启,在用户执行 ...
- poj--1236--Network of Schools(scc+缩点)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14062 Accepted: 56 ...
- Python 下的 return 关键字
def make_sum(a, b): return ('+', a, b) >> make_sum(1, 2) ('+', 1, 2) 显示地返回一个元组(tuple),当然 retur ...
- ThinkPHP5+Redis单例型购物车
<?php /** * Redis + 单例型购物车 * param $basket 存储商品信息 * param $ins 存储实例化对象 */ namespace lib; use redi ...
- Python multiprocessing.Manager介绍和实例(进程间共享数据)
Python中进程间共享数据,处理基本的queue,pipe和value+array外,还提供了更高层次的封装.使用multiprocessing.Manager可以简单地使用这些高级接口. Mana ...