这题说的是每个员工有工资 水平 在公司待的年限这几个属性,有大量的查询 查的是在一定的水平和工作年限的工人总工资是多少 这个思路是比较简单的我们按照他们的水平排序,排完后,使用主席树不断地往里面插,然后查询即可

但是有一个问题就是 可能有些点不存在 因为这题不能讲所有的点全部离散

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <vector>
using namespace std;
const int maxn = ;
typedef long long ll;
struct person{
ll S,L,A; int id;
bool operator <(const person Aa)const{
return L < Aa.L || ( L==Aa.L && id < Aa.id );
}
}P[maxn];
ll A[ maxn ],ans,L[maxn],val[maxn*];
int cL, cR,T[ maxn ],Ls[maxn*],Rs[maxn*],Len;
void insert(int L, int R, int K,ll v, int per, int &x){
x=++Len;
Ls[x]=Ls[per];
Rs[x]=Rs[per];
val[x]=val[per]+v;
if(L==R) return;
int mid = (L+R)>>;
if( K <= mid ) insert( L, mid, K, v, Ls[per], Ls[x] );
else insert( mid+, R, K, v, Rs[per], Rs[x] );
}
void query(int L, int R,int per,int cur){
if(cL<=L&&R<=cR){
ans+=val[cur]-val[per]; return ;
}
int mid=( L + R )>>;
if(cL<=mid) query( L, mid, Ls[per], Ls[cur] );
if(cR>mid ) query( mid+,R,Rs[per], Rs[cur] );
}
int main()
{
int n;
while(scanf("%d",&n)==){
for(int i=; i<n; ++i){
scanf("%I64d%I64d%I64d",&P[i].S,&P[i].L,&P[i].A);
A[i]=P[i].A;
L[i]=P[i].L;
P[i].id=i;
}
sort(P,P+n);
sort(A,A+n);
sort(L,L+n);
int num=unique(A,A+n)-A;
T[]=Ls[]=Rs[]=Len=;val[]=;
for(int i=; i<n; ++i){
int loc = lower_bound(A,A+num,P[i].A)-A+;
insert(,num,loc,P[i].S,T[i],T[i+]);
}
int m;
scanf("%d",&m);
ans=;
ll LL,LH,AL,AH;
for(int i=; i<m; ++i){
scanf("%I64d%I64d%I64d%I64d",&LL,&LH,&AL,&AH);
ll locL=min(LL+ans,LH-ans);
ll locR=max(LL+ans,LH-ans);
ll aL=min(AL+ans,AH-ans);
ll aR=max(AL+ans,AH-ans);
ans=;
int Le=lower_bound( L, L+n, locL )-L;
int Re=upper_bound( L, L+n, locR )-L;
if(Le==Re){
puts(""); continue;
}
cL=lower_bound( A , A+num , aL )-A;
cR=upper_bound( A , A+num , aR )-A-;
if(cL>=cR||aL==aR){
if((aL<=A[cL]&&A[cL]<=aR)==false ){
puts(""); continue;
}
}
cL++; cR++;
query(,num,T[Le],T[Re]);
printf("%I64d\n",ans);
}
}
return ;
}

hdu 5140 主席树的更多相关文章

  1. hdu 5919 主席树(区间不同数的个数 + 区间第k大)

    Sequence II Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Tot ...

  2. Super Mario HDU 4417 主席树区间查询

    Super Mario HDU 4417 主席树区间查询 题意 给你n个数(编号从0开始),然后查询区间内小于k的数的个数. 解题思路 这个可以使用主席树来处理,因为这个很类似查询区间内的第k小的问题 ...

  3. HDU 2852 主席树

    KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  4. HDU 2655 主席树

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  5. HDU 6278 主席树(区间第k大)+二分

    Just h-index Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)To ...

  6. HDU 2665(主席树,无修改第k小)

    Kth number                                                 Time Limit: 15000/5000 MS (Java/Others)   ...

  7. HDU 3333 & 主席树

    题意: balabala SOL: 这题用主席树怎么做呢...貌似一模一样...一个一个建n棵的线段树.先把上一棵树复制下来,当a[i]出现过,就把这棵树里的那个位置去掉------一模一样的思维.. ...

  8. HDU 4251 --- 主席树(划分树是正解)

    题意:查询区间中位数 思路:模板题,相当于区间第K大的数,主席树可以水过,但划分树是正解.但还没搞明白划分树,先上模板 #include <iostream> #include <c ...

  9. HDU - 4866 主席树 二分

    题意:在x轴\([1,X]\)内的上空分布有n个占据空间\([L_i,R_i]\),高度\(D_i\)的线段,射中线段的得分为其高度,每次询问从x轴的\(x\)往上空射的最近k个线段的总得分,具体得分 ...

随机推荐

  1. hadoop程序MapReduce之WordCount

    需求:统计一个文件中所有单词出现的个数. 样板:word.log文件中有hadoop hive hbase hadoop hive 输出:hadoop 2 hive 2 hbase 1 MapRedu ...

  2. linux文件类型详解

    *nix 有各种的文件类型 当#ls -la后,会发现在权限位前有个 - 有些是 b 有些是 d 这个位置就是文件类型的标示   普通文件regular file,  用 - (破折号)标示, 比如 ...

  3. iOS 9 分屏多任务:入门(中文版)

    本文转载至 http://www.cocoachina.com/ios/20150714/12555.html 本文由钢铁侠般的卿哥(微博)翻译自苹果官方文档:Adopting Multitaskin ...

  4. Android 使用DatePicker以及TimePicker显示当前日期和时间

    课程内容1.介绍DatePicker和TimePicker两种实现动态输入日期和事件的功能2.介绍DatePickerDialog和TimePickerDialog来年耕种实现动态输入日期和事件的对话 ...

  5. Oracle 12C卸载图文教程

    第一步:找到自己的Oracle安装目录.我的目录是:D:\app\u01\product\12.1.0\dbhome_1\deinstall ,然后点击bat文件.出现如下等待画面.   第二步:耐心 ...

  6. openstack的glance、nova、cinder使用ceph做后端存储

    块设备与 OPENSTACK 通过 libvirt 你可以把 Ceph 块设备用于 OpenStack ,它配置了 QEMU 到 librbd 的接口. Ceph 把块设备映像条带化为对象并分布到集群 ...

  7. SPOJ - DQUERY

    题目链接:传送门 题目大意:一个容量 n 的数组, m次询问,每次询问 [x,y]内不同数的个数 题目思路:主席树(注意不是权值线段树而是位置线段树) 也就是按一般线段树的逻辑来写只是用主席树实现而已 ...

  8. python的类继承与派生

    一.继承和派生简介: 其实是一个一个事物站在不同角度去看,说白了就是基于一个或几个类定义一个新的类.比如定义了动物类接着派生出了人类,你也可以说人类继承了动物类.一个意思.此外python类似于C和C ...

  9. Python语音合成

    注意:通过win32com调用的windows的SAPI,所以本脚本只适应于windows平台 代码很简单 #coding:utf-8 import win32com.client import ti ...

  10. 树形DP+背包(poj1155泛化分组背包)

    TELE Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3675   Accepted: 1936 Description ...