http://acm.hfut.edu.cn/OnlineJudge/

中文题。

区间线段树,需要剪枝。n的大小有问题。

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath> using namespace std;
#define ls rt<<1
#define rs rt<<1|1
#define lson l, m, rt<<1
#define rson m + 1, r, rt<<1|1
const int inf = 0x3f3f3f3f;
const int maxn = 2e4 + ; struct SegTree{
int maxv, minv;
int lx, rx, sumx;//该区间左边是否被淹,右边,总的小岛数
}seg[maxn << ];
struct Node{
int h, id;
}q[maxn];
int a[maxn]; void build(int l, int r, int rt){
seg[rt].lx = seg[rt].rx = seg[rt].sumx = ;
if (l == r){
seg[rt].maxv = seg[rt].minv = a[l];
return ;
}
int m = (l + r) >> ;
build(lson);
build(rson);
seg[rt].maxv = max(seg[ls].maxv, seg[rs].maxv);
seg[rt].minv = min(seg[ls].minv, seg[rs].minv);
}
void pushUp(int rt){
seg[rt].sumx = seg[ls].sumx + seg[rs].sumx - (seg[ls].rx & seg[rs].lx);
seg[rt].lx = seg[ls].lx;
seg[rt].rx = seg[rs].rx;
seg[rt].minv = min(seg[ls].minv, seg[rs].minv);//
}
void update(int h, int l, int r, int rt){
if (h < seg[rt].minv) return;
if (h >= seg[rt].maxv){
seg[rt].minv = inf;//这句表明接下来的h对这个区间都不会再有影响,相当于减掉了这个区间否则tle
seg[rt].rx = seg[rt].lx = seg[rt].sumx = ;
return ;
}
int m = (l + r) >> ;
update(h, lson);
update(h, rson);
pushUp(rt);
}
bool cmp(Node a, Node b){
return a.h < b.h;
}
int ans[maxn];
int main(){
int n, m;
scanf("%d", &n);
for (int i = ; i <= n; ++i){
scanf("%d", &a[i]);
}
build(, n, );
scanf("%d", &m);
for (int i = ; i < m; ++i){
scanf("%d", &q[i].h);
q[i].id = i;
}
sort(q, q + m, cmp);
for (int i = ; i < m; ++i){
update(q[i].h, , n, );
ans[q[i].id] = seg[].sumx;
}
for (int i = ; i < m; ++i){
printf("%d\n", ans[i]);
}
return ;
}

最新文章

  1. yousa_team团队项目 兼职平台 完成展示
  2. Marvel – 将图像和源文件转换成互动,共享的原型
  3. 使用SBT构建Scala应用(转自git)
  4. php正则:匹配(),{},[]小括号,大括号,中括号里面的内容
  5. NodeJS文件读取:感恩常在--抓把糖果,愉悦客人
  6. 使用libevent进行多线程socket编程demo
  7. Keil C51 Data Overlaying
  8. tomcat 下部署单框架cas时,报出org.apache.jasper.JasperException异常的解决办法
  9. 随机算法 poj 2576 Tug of War
  10. Python之shutil模块(复制移动文件)
  11. abp添加动态菜单
  12. [Kubernetes]如何使用yaml文件使得可以向外暴露服务
  13. Linux 文档与目录结构
  14. Ex 6_18 硬币有限的兑换问题_第七次作业
  15. 神经网络写诗(charRNN)
  16. dovecot--查询未读邮件个数
  17. 用newLISP通过SMTPserver发送邮件
  18. CGI PL PERL脚本 提权
  19. iptables配置允许mysql远程访问
  20. qsort函数、sort函数

热门文章

  1. Android——DEBUG 堆栈
  2. 用C++实现文件压缩(1.5)
  3. redis学习笔记——应用场景
  4. perl学习笔记——文件测试
  5. Selenium webdriver Java 高级应用
  6. grep和map计算两个集合交集、并集、补集
  7. HDU 3085 双广
  8. Echart - 最好最强大效果最丰富的可视化图表插件
  9. script
  10. UML序列图