博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 1067: [SCOI2007]降雨量
阅读量:4983 次
发布时间:2019-06-12

本文共 2134 字,大约阅读时间需要 7 分钟。

线段树  胡乱判断法。。。

 

/**************************************************************    Problem: 1067    User: lxy8584099    Language: C++    Result: Accepted    Time:172 ms    Memory:5396 kb****************************************************************/ #include
#define il inline#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)#define Max(a,b) ((a)>(b)?(a):(b))using namespace std;const int N=200005;int n,m,num[N],ls[N],rs[N];int ye[N],co[N];bool f[N];struct node{    int ans,f;}; il int gi(){    int a=0;char x=getchar();bool f=0;    while((x<'0'||x>'9')&&x!='-')x=getchar();    if(x=='-')x=getchar(),f=1;    while(x>='0'&&x<='9')a=(a<<3)+(a<<1)+x-48,x=getchar();    return f?-a:a;} il void pushup(int rt){    if(rs[rt<<1]==ls[rt<<1|1]-1)f[rt]=f[rt<<1]&f[rt<<1|1];    rs[rt]=rs[rt<<1|1];ls[rt]=ls[rt<<1];    num[rt]=Max(num[rt<<1],num[rt<<1|1]);} il void build(int l,int r,int rt){    if(l==r){rs[rt]=ls[rt]=ye[l],num[rt]=co[l],f[rt]=1;return;}    int m=l+r>>1;    build(lson),build(rson);    pushup(rt);} il node query(int L,int R,int l,int r,int rt){    if(L<=l&&R>=r){        node tmp;        tmp.ans=num[rt],tmp.f=f[rt];        return tmp;    }    int m=l+r>>1;    node tmp;    tmp.ans=0,tmp.f=1;    if(L<=m){        node x=query(L,R,lson);        tmp.ans=Max(tmp.ans,x.ans);        tmp.f&=x.f;    }    if(R>m){        node x=query(L,R,rson);        tmp.ans=Max(tmp.ans,x.ans);        tmp.f&=x.f;    }    return tmp;} int main(){    n=gi();    For(i,1,n)ye[i]=gi(),co[i]=gi();    build(1,n,1);    m=gi();    int x,y;    while(m--){        x=gi(),y=gi();        if(x>=y){printf("false\n");continue;}        int st=lower_bound(ye+1,ye+n+1,x)-ye,ed=lower_bound(ye+1,ye+n+1,y)-ye;        bool fl,fr;int op=0;        fl=ye[st]==x,fr=ye[ed]==y;        if(!fl)st--;        if(st+1<=ed-1)op=query(st+1,ed-1,1,n,1).ans;        if((op>=co[ed]&&fr)||(co[st]
=co[st]&&fl))printf("false\n");        else if(ed-st!=ye[ed]-ye[st]||!fr||!fl)printf("maybe\n");        else printf("true\n");    }    return 0;}

 

转载于:https://www.cnblogs.com/lxy8584099/p/10311770.html

你可能感兴趣的文章
访问者模式
查看>>
CentOS 7安装最新版本Git
查看>>
DTW的原理及matlab实现
查看>>
jQuery EasyUI API 中文文档 - 对话框(Dialog)
查看>>
在Android8.0以上收不到广播问题(AppWidget)
查看>>
Hibernate双向一对多对象关系模型映射
查看>>
WinForm------如何将GridControl数据导出到Excel
查看>>
SCOI2010 传送带 [三分/模拟退火]
查看>>
C#读取文件,返回字符串形式的文件内容
查看>>
卸载软件时出现的“不能够打开文件INSTALL.LOG”错误-清理注册表即可
查看>>
Cesium基础使用介绍
查看>>
R学习笔记(3):绘图
查看>>
elasticsearch 安装记录
查看>>
类的封装
查看>>
命名空间的定义
查看>>
Android 中Json解析的几种框架(Gson、Jackson、FastJson、LoganSquare)使用与对比
查看>>
byte[]与各种数据类型互相转换示例
查看>>
swift 自定义TabBarItem
查看>>
Android 仿网易新闻v3.5:上下滑动的引导页
查看>>
php解析二维码
查看>>