2017.9.28 降雨量 思考记录
2017-09-28 09:23
232 查看
论逻辑清晰的重要性、
首先大小的关系明摆着是要你建一颗线段树
然后就可以分类讨论了
x没有 y有
x有 y没有
x没有 y没有
x有 y有
对于都没有的情况 只可能是maybe
对于一个没有的情况,只有可能有false和maybe
对于都有的 可能有true maybe false
对于有的直接查询,对于没有的二分查找+1或-1
注意:
l=1,r=n+1
a<=b
y==x视为maybe ←感觉不科学
码:
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
#define zuo o<<1,l,mid
#define you o<<1|1,mid+1,r
map<int,int>ma;
#define N 100005
int yl[N<<2],a,b,op,c,x,y,dui
,n,m,i,ans,lin1,lin2,lin3;
void up(int o)
{
yl[o]=max(yl[o<<1],yl[o<<1|1]);
}
void jia(int o,int l,int r)
{
if(a<=l&&r<=b)
{
if(op==0)
{
yl[o]=c;
}else
{
c=max(c,yl[o]);
}
return;
}
int mid=(l+r)>>1;
if(a<=mid)jia(zuo);
if(b>mid)jia(you);
up(o);
}
int main()
{
int l,r;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
ma[x]=i;
dui[i]=x;
a=b=i;
c=y;
jia(1,1,n);
}
dui[n+1]=2147483644;
scanf("%d",&m);
op=1;
for(i=1;i<=m;i++)
{
scanf("%d%d",&y,&x);
if(y==x)
{
printf("maybe\n");
}else
if(ma[x]==0&&ma[y]==0)
{
printf("maybe\n");
}else
if(ma[x]==0&&ma[y]!=0)
{
l=1;r=n+1;
while(l<r)
{
int mid=(l+r)>>1;
if(dui[mid]>x)r=mid;
else l=mid+1,ans=mid;
}
x=ans;
a=b=ma[y];c=0;
jia(1,1,n);
lin1=c;
a=ma[y]+1;
b=x;c=0;
if(a<=b)jia(1,1,n);
lin2=c;
if(lin1<=lin2)
{
printf("false\n");
}else
{
printf("maybe\n");
}
}else if(ma[x]!=0&&ma[y]==0)
{
l=1;r=n+1;
while(l<r)
{
int mid=(l+r)>>1;
if(dui[mid]>y)r=mid,ans=mid;
else l=mid+1;
}
y=ans;
a=b=ma[x];c=0;
jia(1,1,n);
lin1=c;
a=y;
b=ma[x]-1; c=0;
if(a<=b) jia(1,1,n);
lin2=c;
if(lin1<=lin2)
{
printf("false\n");
}else
{
printf("maybe\n");
}
}else
{
c=0;
a=b=ma[x];
jia(1,1,n);
lin1=c;
c=0;
a=b=ma[y];
jia(1,1,n);
lin2=c;
c=0;
a=ma[y]+1;
b=ma[x]-1;
if(a<=b) jia(1,1,n);
lin3=c;
if(ma[x]-ma[y]==x-y) if(lin1<lin2&&lin1>lin3&&lin2>lin3)
{
printf("true\n");
} else printf("false\n");
else if(lin1<lin2&&lin1>lin3&&lin2>lin3)
{
printf("maybe\n");
} else printf("false\n");
}
}
}
首先大小的关系明摆着是要你建一颗线段树
然后就可以分类讨论了
x没有 y有
x有 y没有
x没有 y没有
x有 y有
对于都没有的情况 只可能是maybe
对于一个没有的情况,只有可能有false和maybe
对于都有的 可能有true maybe false
对于有的直接查询,对于没有的二分查找+1或-1
注意:
l=1,r=n+1
a<=b
y==x视为maybe ←感觉不科学
码:
#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
#define zuo o<<1,l,mid
#define you o<<1|1,mid+1,r
map<int,int>ma;
#define N 100005
int yl[N<<2],a,b,op,c,x,y,dui
,n,m,i,ans,lin1,lin2,lin3;
void up(int o)
{
yl[o]=max(yl[o<<1],yl[o<<1|1]);
}
void jia(int o,int l,int r)
{
if(a<=l&&r<=b)
{
if(op==0)
{
yl[o]=c;
}else
{
c=max(c,yl[o]);
}
return;
}
int mid=(l+r)>>1;
if(a<=mid)jia(zuo);
if(b>mid)jia(you);
up(o);
}
int main()
{
int l,r;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
ma[x]=i;
dui[i]=x;
a=b=i;
c=y;
jia(1,1,n);
}
dui[n+1]=2147483644;
scanf("%d",&m);
op=1;
for(i=1;i<=m;i++)
{
scanf("%d%d",&y,&x);
if(y==x)
{
printf("maybe\n");
}else
if(ma[x]==0&&ma[y]==0)
{
printf("maybe\n");
}else
if(ma[x]==0&&ma[y]!=0)
{
l=1;r=n+1;
while(l<r)
{
int mid=(l+r)>>1;
if(dui[mid]>x)r=mid;
else l=mid+1,ans=mid;
}
x=ans;
a=b=ma[y];c=0;
jia(1,1,n);
lin1=c;
a=ma[y]+1;
b=x;c=0;
if(a<=b)jia(1,1,n);
lin2=c;
if(lin1<=lin2)
{
printf("false\n");
}else
{
printf("maybe\n");
}
}else if(ma[x]!=0&&ma[y]==0)
{
l=1;r=n+1;
while(l<r)
{
int mid=(l+r)>>1;
if(dui[mid]>y)r=mid,ans=mid;
else l=mid+1;
}
y=ans;
a=b=ma[x];c=0;
jia(1,1,n);
lin1=c;
a=y;
b=ma[x]-1; c=0;
if(a<=b) jia(1,1,n);
lin2=c;
if(lin1<=lin2)
{
printf("false\n");
}else
{
printf("maybe\n");
}
}else
{
c=0;
a=b=ma[x];
jia(1,1,n);
lin1=c;
c=0;
a=b=ma[y];
jia(1,1,n);
lin2=c;
c=0;
a=ma[y]+1;
b=ma[x]-1;
if(a<=b) jia(1,1,n);
lin3=c;
if(ma[x]-ma[y]==x-y) if(lin1<lin2&&lin1>lin3&&lin2>lin3)
{
printf("true\n");
} else printf("false\n");
else if(lin1<lin2&&lin1>lin3&&lin2>lin3)
{
printf("maybe\n");
} else printf("false\n");
}
}
}
相关文章推荐
- 2017.9.28 CF #R2 B 思考记录
- 2017.9.28 产品加工 思考记录
- 2017.9.28 约数研究 思考记录
- 2017.8.10 奖励关 思考记录
- 2017.9.10 土地购买 思考记录
- [生而为人-思考] Knowledge Cooking -6th 分享会记录
- 2017.6.27 树上操作 思考记录
- 关于定时器的设计学习记录(学习他人资料)和思考---定时任务 超时控制 频率限制
- 2017.9.26 块的计数 思考记录
- 某系统日志记录的思考----第一篇:需求
- 某系统日志记录的思考----第四篇,学习
- 动态规划;漂亮打印问题;时间复杂度O(n方); 思考方法记录在内;
- 2017.5.9 寻找道路 思考记录
- 2017.5.11 道路修建 思考记录
- 关于MYSQL 和INNODB的逻辑关系图。最好的理解是一点点动手做,观察,记录,思考。
- 2017.9.10 ricehub 思考记录
- 一次关于思考的记录
- 2017.8.24 快速傅里叶 思考记录
- 2017.6.15 数字表格 思考记录