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

这些天之间这条边都必须$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. 结构-行为-样式-Bootstrap笔记

    1.自上而下的内容布局,中间内容可变,应该用: <div class=" container-fluid"> <div class=" row" ...

  2. C语言之数组

    数组 数组就是在内存空间中,开辟一个大的空间,然后再将这个大的空间均的分为若干份的小空间,每个小空间用来保存一个数据. 1). 数组的专业术语: 长度:指的能存放数据的个数 下标/索引:每一个数据所在 ...

  3. ASP.NET MVC 异步Excel数据选择导出

    以前习惯用一些框架来实现Excel文件数据导出,工作中也经常用到:比如extJs.easyUI.angularJs等,最近在做mvc程序的时候要实现该功能,相信这种功能在我们实际工作中是很常见,尤其是 ...

  4. js如何判断是否在iframe中

    JS代码://方式一 if (self.frameElement && self.frameElement.tagName == "IFRAME") { alert ...

  5. 第一百二十六节,JavaScript,XPath操作xml节点

    第一百二十六节,JavaScript,XPath操作xml节点 学习要点: 1.IE中的XPath 2.W3C中的XPath 3.XPath跨浏览器兼容 XPath是一种节点查找手段,对比之前使用标准 ...

  6. C#字符串和16进制转换

    public static string StrToHex(string mStr) //返回处理后的十六进制字符串 { return BitConverter.ToString( ASCIIEnco ...

  7. python2.x urllib2和urllib的使用

    1.最简单用法 urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,...) import urllib2 import ur ...

  8. 某种数列问题 (一场欢乐赛的T2)

    个人觉得挺难的一道DP题 不会 没有思路 于是去找的正解 于是.. #include <iostream> #include <cstring> #define Max 100 ...

  9. c# PictureBox 的图像上使用鼠标画矩形框

    C# 中在图像上画框,通过鼠标来实现主要有四个消息响应函数MouseDown, MouseMove, MouseUp, Paint重绘函数实现.当鼠标键按下时开始画框,鼠标键抬起时画框结束. Poin ...

  10. Tomcat 6 跨域的支持

    1.添加2个jar包 这个我是自己保存在云端的 cors-filter-1.7.jar java-property-utils-1.9.jar tomcat7以后自动支持 2.tomcat 下面的we ...