bzoj 1067: [SCOI2007]降雨量
2016-03-01 22:46
363 查看
#include<cstdio> #include<iostream> #include<algorithm> #define M 50008 using namespace std; struct shu { int l,r,ma; }shu[4*M]; int l,r,n,m,b[M],a1[M],a2[M]; void jian(int b1,int l,int r) { shu[b1].l=l; shu[b1].r=r; if(l==r) { shu[b1].ma=a2[l]; return; } int mid=(l+r)>>1; jian(b1*2,l,mid); jian(b1*2+1,mid+1,r); shu[b1].ma=max(shu[b1*2].ma,shu[b1*2+1].ma); return; } int zhao(int b1,int l,int r) { if(shu[b1].l>=l&&shu[b1].r<=r) return shu[b1].ma; int mid=(shu[b1].l+shu[b1].r)>>1,mx=-100000000; if(l<=mid) mx=max(zhao(b1*2,l,r),mx); if(r>mid) mx=max(zhao(b1*2+1,l,r),mx); return mx; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&a1[i],&a2[i]); jian(1,1,n); scanf("%d",&m); for(int i=1;i<=m;i++) { int b1,b2,b3,c1,c2; scanf("%d%d",&c1,&c2); b1=lower_bound(a1+1,a1+n+1,c1)-a1; b2=lower_bound(a1+1,a1+n+1,c2)-a1; if(a1[b1]==c1) b3=zhao(1,b1+1,b2-1); else b3=zhao(1,b1,b2-1); if(a1[b1]==c1&&a1[b2]==c2&&a2[b1]>a2[b2]&&a2[b2]>b3&&b2-1-b1==c2-c1-1) printf("true\n"); else if((a1[b1]==c1&&a1[b2]!=c2&&a2[b1]<=b3)||(a1[b2]==c2&&a1[b1]!=c1&&a2[b2]<=b3) ||(a1[b1]==c1&&a1[b2]==c2&&(a2[b1]<a2[b2]||a2[b2]<=b3))) printf("false\n"); else printf("maybe\n"); } return 0; }
显然的线段树,然而判断条件有点复杂
x,y都有且满足条件,且他们中间数都有为true
否则 一旦有一个x或y存在不满足条件 为false
否则 为maybe
相关文章推荐
- 第三百三十四天 how can I 坚持
- 个人总结(3.1)
- 打开和关闭mysql服务的两种方法
- 数据结构-单向有头不循环链表基本实例
- jQuery对 动态添加 的元素 绑定事件(on()的用法)
- Web安全之CSRF攻击
- 深层神经网络
- HDOJ-1503 Advanced Fruits
- 2015年总结
- 进程
- 关于UnityEngine.Network的一些浅显认知
- Java程序员应该了解的10个面向对象设计原则
- 【走过的弯路】 程序编写规范
- Cocos2d-x的坐标系
- Java多线程之Executor框架(2)
- Nginx基本配置、性能优化指南
- ODBC和JDBC区别
- 常见Oracle HINT的用法
- PAT-A1058 A+B in Hogwarts (20)(模拟)
- HTML-HTML链接JavaScript的几种方法