首先要计算出每一条路最早开始的那一天,然后最晚结束的那一天。

这些天之间这条边都必须$open$,然后就变成一个线段树区间$+val$的问题了,最后询问一个每个点的$val$是多少。

注意:数据中有$ai>bi$的情况。

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<iostream>
#include<ctime>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0);
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
} const int maxn=;
int T,n,m,w[maxn];
struct X{ int u,v; }p[maxn];
int L[maxn],R[maxn];
int s[*maxn]; void build(int l,int r,int rt)
{
s[rt]=;
if(l==r) return;
int m=(l+r)/;
build(l,m,*rt);
build(m+,r,*rt+);
} void update(int L,int R,int x,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
if(s[rt]==) s[rt]=x;
return;
} if(s[rt]!=)
{
if(s[*rt]==) s[*rt]=s[rt];
if(s[*rt+]==) s[*rt+]=s[rt];
} int m=(l+r)/;
if(L<=m) update(L,R,x,l,m,*rt);
if(R>m) update(L,R,x,m+,r,*rt+);
} int get(int pos,int l,int r,int rt)
{
if(l==r) { return s[rt]; } if(s[*rt]==) s[*rt]=s[rt];
if(s[*rt+]==) s[*rt+]=s[rt]; int m =(l+r)/;
if(l<=pos&&pos<=m) return get(pos,l,m,*rt);
else return get(pos,m+,r,*rt+);
} void ADD(int L,int R,int x,int l,int r,int rt)
{
if(L<=l&&r<=R) { s[rt]+=x; return; }
int m=(l+r)/;
if(L<=m) ADD(L,R,x,l,m,*rt);
if(R>m) ADD(L,R,x,m+,r,*rt+);
} int quary(int pos,int l,int r,int rt)
{
if(l==r) return s[rt]; if(s[rt]!=)
{
s[*rt]+=s[rt];
s[*rt+]+=s[rt];
s[rt]=;
} int m =(l+r)/;
if(l<=pos&&pos<=m) return quary(pos,l,m,*rt);
else return quary(pos,m+,r,*rt+); } int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=; i<=n-; i++) scanf("%d",&w[i]);
for(int i=; i<=m; i++)
{
scanf("%d%d",&p[i].u,&p[i].v);
if(p[i].v<p[i].u) swap(p[i].v,p[i].u);
}
build(,n,);
for(int i=; i<=m; i++) update(p[i].u,p[i].v-,i,,n,);
for(int i=; i<=n-; i++) L[i]=get(i,,n,); build(,n,);
for(int i=m; i>=; i--) { update(p[i].u,p[i].v-,i,,n,); }
for(int i=; i<=n-; i++) R[i]=get(i,,n,); build(,m,);
for(int i=;i<=n-;i++)
{
if(L[i]==||R[i]==) continue;
ADD(L[i],R[i],w[i],,m,);
}
for(int i=;i<=m;i++) printf("%d\n",quary(i,,m,));
}
return ;
}

HDU 5861 Road的更多相关文章

  1. hdu 5861 Road 两棵线段树

    传送门:hdu 5861 Road 题意: 水平线上n个村子间有 n-1 条路. 每条路开放一天的价格为 Wi 有 m 天的操作,每天需要用到村子 Ai~Bi 间的道路 每条路只能开放或关闭一次. ( ...

  2. HDU 5861 Road 线段树区间更新单点查询

    题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5861 Road Time Limit: 12000/6000 MS (Java/Othe ...

  3. 2016 Multi-University Training Contest 10 [HDU 5861] Road (线段树:区间覆盖+单点最大小)

    HDU 5861 题意 在n个村庄之间存在n-1段路,令某段路开放一天需要交纳wi的费用,但是每段路只能开放一次,一旦关闭将不再开放.现在给你接下来m天内的计划,在第i天,需要对村庄ai到村庄bi的道 ...

  4. HDU 5861 Road (线段树)

    Road 题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5861 Description There are n villages alo ...

  5. HDU 5861 Road(线段树 区间修改 单点查询)

    Road Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  6. HDU 5669 Road(线段树建树)(分层图最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5669 [分析]线段树建树+分层图最短路 #include <cstdio> #includ ...

  7. HDU 3917 Road constructions(最小割---最大权闭合)

    题目地址:HDU 3917 这题简直神题意... 题目本身就非常难看懂不说..即使看懂了.也对这题意的逻辑感到无语...无论了.. 就依照那题意上说的做吧... 题意:给你n个城市,m个公司.若干条可 ...

  8. hdu 3917 Road constructions 最大权闭合子图

    样例说明: n(城市数目)   m(工程队数目) 每个工程队上交的税收 val[i] k(k个工程) xi   yi  ci  costi , 工程队ci承包由xi到yi,政府的补贴为costi 注意 ...

  9. hdu 5669 Road

    题目大意 \(n\)个点,\(m\)次连边 每次连边为\((a\sim b)\leftrightarrow (c\sim d),cost=w\) 即在\((a-b)\)区间内的点向\((c-d)\)区 ...

随机推荐

  1. 【C语言】一些重要的知识点

    1.#include <stdio.h> #include 是C语言的预处理指令之一,所谓预处理,就是在编译之前做的处理,预处理指令一般以 # 开头 #include 指令后面会跟着一个文 ...

  2. gRPC helloworld service, RESTful JSON API gateway and swagger UI

    概述 本篇博文完整讲述了如果通过 protocol buffers 定义并启动一个 gRPC 服务,然后在 gRPC 服务上提供一个 RESTful JSON API 的反向代理 gateway,最后 ...

  3. Docker集群实验环境布署--swarm【5 容器启动组件--node】

    10.40.100.143 docker-node0.venic.com 10.40.100.144 docker-node1.venic.com     原用swarm镜像   直接启动     1 ...

  4. 用linux 命令 执行ci框架的方法

    最近要跑一个数据量比较大的脚本,刚开始在浏览器页面访问发行nginx 5.4 超时, 又不想去修改nginx的连接时间,只能在服务器执行了, 执行方法:进入到ci 的根目录:#php index.ph ...

  5. Redmine数据库备份及搬家

    Bitnami Redmine的备份分2种方式: 1.导出数据库 2.整个目录搬家 不管是哪种都想停掉服务,redmine相关的服务有以下5个: redmineApache redmineMySQL ...

  6. 使用spring-data-redis操作redis

    redis.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="htt ...

  7. session fixation

    转自:session fixation攻击 什么是session fixation攻击 Session fixation有人翻译成"Session完成攻击",实际上fixation ...

  8. c++ 常见问题之 const

    const 默认状态下const对象仅在文件内有效,添加extern关键字可以在多个文件共享 const 引用: 可以把引用绑定到const对象上,对常量的引用不能被用作修改它所绑定的对象 const ...

  9. Windows端口转发

    1. PortTunnel 2. windows 自带的 netsh -----windows下也有一个小工具:portforward.exe,图形界面容易操作,个人平常使用可以,但是也没有办法实现与 ...

  10. Chapter 16_5 单一方法

    当一个对象只有一个方法时,可以不用创建接口table,但是要将这个单独的方法作为对象来返回.可以参考迭代器那一节,是如何构造一个迭代器函数,那个函数将状态保存为closure. 一个具有状态的迭代器是 ...