hdu4325 线段树 成段更新
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 100010
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int sum[maxn<<],mark[maxn<<];
int B[maxn*],x[maxn],y[maxn],que[maxn];
int find(int v,int k)
{
int l,m,r;
l=;
r=k;
while(l<=r)
{
m=(l+r)/;
if(B[m]==v)
return m;
else if(B[m]>v)
r=m-;
else l=m+;
}
return -;
}
void pushup(int rt)
{
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void pushdown(int rt)
{
if(mark[rt])
{
mark[rt<<]+=mark[rt];
mark[rt<<|]+=mark[rt];
sum[rt<<]+=mark[rt];
sum[rt<<|]+=mark[rt];
mark[rt]=;
}
}
void build(int l,int r,int rt)
{
mark[rt]=sum[rt]=;
if(l==r)
{
return ;
}
int m=(l+r)/;
build(lson);
build(rson);
}
void updata(int L,int R,int c,int l,int r,int rt)
{
if(l>=L&&R>=r)
{
sum[rt]+=c;
mark[rt]+=c;
return ;
}
pushdown(rt);
int m=(l+r)/;
if(m>=L)
updata(L,R,c,lson);
if(R>m)
updata(L,R,c,rson);
pushup(rt);
}
int query(int p,int l,int r,int rt)
{
if(l==r)
{
return sum[rt];
}
pushdown(rt);
int m=(l+r)/;
if(m>=p)
return query(p,lson);
else return query(p,rson);
}
int main()
{
int t,i,n,m,ff=;
scanf("%d",&t);
while(t--)
{
int num=;
scanf("%d%d",&n,&m);
for(i=;i<n;i++)
{
scanf("%d%d",&x[i],&y[i]);
B[num++]=x[i];
B[num++]=y[i];
}
for(i=;i<m;i++)
{
scanf("%d",&que[i]);
B[num++]=que[i];
}
sort(B+,B+num);
int k=;
for(i=;i<num;i++)
{
if(B[i]!=B[i-])
{
B[k++]=B[i];
}
}
for(i=k-;i>;i--)
{
if(B[i]!=B[i-]+)
B[k++]=B[i-]+;
}
sort(B+,B+k);
build(,k-,);
for(i=;i<n;i++)
{
int fx=find(x[i],k-);
int fy=find(y[i],k-);
// printf("%d %d\n",fx,fy);
updata(fx,fy,,,k-,);
}
printf("Case #%d:\n",++ff);
for(i=;i<m;i++)
{
int fp=find(que[i],k-);
printf("%d\n",query(fp,,k-,));
}
}
}
hdu4325 线段树 成段更新的更多相关文章
- ACM: Copying Data 线段树-成段更新-解题报告
Copying Data Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description W ...
- Codeforces Round #149 (Div. 2) E. XOR on Segment (线段树成段更新+二进制)
题目链接:http://codeforces.com/problemset/problem/242/E 给你n个数,m个操作,操作1是查询l到r之间的和,操作2是将l到r之间的每个数xor与x. 这题 ...
- POJ 2777 Count Color (线段树成段更新+二进制思维)
题目链接:http://poj.org/problem?id=2777 题意是有L个单位长的画板,T种颜色,O个操作.画板初始化为颜色1.操作C讲l到r单位之间的颜色变为c,操作P查询l到r单位之间的 ...
- hdu 4747【线段树-成段更新】.cpp
题意: 给出一个有n个数的数列,并定义mex(l, r)表示数列中第l个元素到第r个元素中第一个没有出现的最小非负整数. 求出这个数列中所有mex的值. 思路: 可以看出对于一个数列,mex(r, r ...
- HDU1698_Just a Hook(线段树/成段更新)
解题报告 题意: 原本区间1到n都是1,区间成段改变成一个值,求最后区间1到n的和. 思路: 线段树成段更新,区间去和. #include <iostream> #include < ...
- HDU 3577 Fast Arrangement ( 线段树 成段更新 区间最值 区间最大覆盖次数 )
线段树成段更新+区间最值. 注意某人的乘车区间是[a, b-1],因为他在b站就下车了. #include <cstdio> #include <cstring> #inclu ...
- poj 3468 A Simple Problem with Integers 【线段树-成段更新】
题目:id=3468" target="_blank">poj 3468 A Simple Problem with Integers 题意:给出n个数.两种操作 ...
- POJ3468_A Simple Problem with Integers(线段树/成段更新)
解题报告 题意: 略 思路: 线段树成段更新,区间求和. #include <iostream> #include <cstring> #include <cstdio& ...
- poj 3648 线段树成段更新
线段树成段更新需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候.延迟标记的意思是:这个区间的左右儿子都需要被更新,但是当 ...
随机推荐
- Python移动自动化测试面试
Python移动自动化测试面试 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候可以关 ...
- webService学习五(插入片,---监控方法)
WS Explorer工具的使用: 1- web服务浏览器 2-将对应的路径copy到这里 - 3- 4-- 5-- 6--请求的数据: 7--相应数据 二.使用TCP/IP Monitor-拦截HT ...
- 在window下远程虚拟机(centos)hadoop运行mapreduce程序
(注:虽然连接成功但是还是执行不了.以后有时间再解决吧 看到的人别参考仅作个人笔记)先mark下 1.首先在window下载好一个eclipse.和拷贝好linux里面hadoop版本对应的插件(我是 ...
- 统一建模语言简介UML
统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标准.它的特点是简单 ...
- 使用Python Requests上传表单数据和文件
在Python环境下写一个HTTP客户端,发送POST请求,同时上传表单数据和文件,我们可以使用Requests模块来实现.代码如下: data = { 'name': 'nginx' } files ...
- SSH免密登录设置
******配置主机之间的免密ssh登陆 假如 A 要登陆 B 在A上操作: (1)首先生成密钥对 ssh-keygen (提示时,直接回车即可) (2)再将A自己的公钥拷贝并追加到B的授权列 ...
- vue项目 安装和配置sass & main.js引入scss文件报错
通过npm 安装 cnpm install --save-dev sass-loader cnpm install --save-dev node-sass 在build文件夹下的webpack.ba ...
- PHP拓展 - xhprof性能分析工具
Windows安装 参考:https://www.cnblogs.com/buexplain/p/4821619.html dll文件下载:https://windows.php.net/downlo ...
- 使用Charles在iOS6上进行抓包
抓取Web页面的网络请求很容易,Chrome和Firefox都很容易做到.iOS APP如何抓包呢?其实也很容易,我比较喜欢使用 Charles. 我用的是Mac电脑,首先建立一个热点,然后让iOS设 ...
- CentOS 7安装与配置JDK8
1.检查是否安装过JDK 2.下载安装包并上传服务器 3.安装JDK rpm -ivh jdk-8u131-linux-x64.rpm 4.查看是否安装正常 java -version 5.配置环境变 ...