线段树,TLE,各种。唉。。。。我真是笨死了。。。。

我用的线段树是记录左右区间最长连续棵数的。。。反正TLE

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std;
const int N=50050;
struct Q{
int val,index;
}Que[N];
int SegT[N*4],L[N*4],R[N*4],C[N*4];
int TreeH[N];
int ans[N];
bool cmp(Q a,Q b){
if(a.val<b.val) return true;
return false;
} void build(int l,int r,int rt){
L[rt]=R[rt]=r-l+1;C[rt]=1;
if(l==r){
SegT[rt]=TreeH[l];
return ;
}
int m=(l+r)>>1;
build(l,m,rt<<1);
build(m+1,r,rt<<1|1);
SegT[rt]=max(SegT[rt<<1],SegT[rt<<1|1]);
} void slove(int l,int r,int rt,int hv){
if(l==r){
return ;
}
int m=(l+r)>>1;
if(hv>=SegT[rt<<1])
L[rt<<1]=R[rt<<1]=C[rt<<1]=0;
else
slove(l,m,rt<<1,hv);
if(hv>=SegT[rt<<1|1]) L[rt<<1|1]=R[rt<<1|1]=C[rt<<1|1]=0;
else
slove(m+1,r,rt<<1|1,hv);
L[rt]=L[rt<<1],R[rt]=R[rt<<1|1];
if(L[rt<<1]>=m-l+1) L[rt]+=L[rt<<1|1];
if(R[rt<<1|1]>=r-m) R[rt]+=R[rt<<1];
C[rt]=C[rt<<1]+C[rt<<1|1];
if(R[rt<<1]&&L[rt<<1|1]&&C[rt]) C[rt]--;
} void readint1(int i) {
TreeH[i]=0;
char ch;
ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch)){
TreeH[i]=TreeH[i]*10+ch-'0';
ch=getchar();
}
} int readint2(){
int x=0;
char ch;
ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch)){
x=x*10+ch-'0';
ch=getchar();
}
return x;
} int main(){
int n,q;
while(scanf("%d%d",&n,&q)!=EOF){
memset(ans,0,sizeof(int)*n);
for(int i=1;i<=n;i++)
readint1(i);
build(1,n,1);
for(int i=0;i<q;i++){
Que[i].val=readint2();
Que[i].index=i;
}
sort(Que,Que+q,cmp);
for(int i=0;i<q;i++){
if(Que[i].val>=SegT[1]){
ans[Que[i].index]=0;
}
else{
slove(1,n,1,Que[i].val);
ans[Que[i].index]=C[1];
}
}
for(int i =0;i<q;i++)
printf("%d\n",ans[i]);
}
return 0;
}

  

这个是看了别人之后的解法,漂亮啊。。。

把树排序,把询问排序,都按高度。两个指针扫描,对于不高于询问高度的树,对其原本的位置,若左右均未砍去,则段数+1,若均砍去,则段数-1,除此外,段数不变。

再感叹一下,漂亮啊。。。。T_T

#include <iostream>
#include <cstdio>
#include <algorithm> using namespace std;
const int N=50050; struct TH{
int height,index;
}Tree[N],Que[N];
bool vis[N];
int n,q,ans[N];
bool cmp(TH a,TH b){
if(a.height<b.height) return true;
return false;
} void work(int &c,int index){
if(index==0){
if(vis[index+1]) c--;
}
else if(index==n-1){
if(vis[index-1]) c--;
}
else{
if(!vis[index+1]&&!vis[index-1]) c++;
else if(vis[index+1]&&vis[index-1]){
c--;
}
}
} int main(){
while(scanf("%d%d",&n,&q)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&Tree[i].height);
Tree[i].index=i;
}
sort(Tree,Tree+n,cmp);
for(int i=0;i<q;i++){
scanf("%d",&Que[i].height);
Que[i].index=i;
}
sort(Que,Que+q,cmp);
memset(vis,false,sizeof(vis));
int ct=0;
int counts=1;
for(int i=0;i<q;i++){
for(;ct<n;ct++){
if(Tree[ct].height>Que[i].height) break;
vis[Tree[ct].index]=true;
work(counts,Tree[ct].index);
}
ans[Que[i].index]=counts;
}
for(int i=0;i<q;i++)
printf("%d\n",ans[i]);
}
return 0;
}

  

HDU 5200 脑洞题 离线的更多相关文章

  1. hdu 5200 Trees [ 排序 离线 2指针 ]

    传送门 Trees  Accepts: 156  Submissions: 533  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 655 ...

  2. 图论(KM算法,脑洞题):HNOI 2014 画框(frame)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABPoAAANFCAIAAABtIwXVAAAgAElEQVR4nOydeVxTV/r/n9ertaJEC4

  3. HDU-1042-N!(Java大法好 &amp;&amp; HDU大数水题)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Subm ...

  4. hdu 2586 How far away?(LCA模板题+离线tarjan算法)

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  5. HDU 3938 Portal (离线并查集,此题思路很强!!!,得到所谓的距离很巧妙)

    Portal Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  6. HDU 4630 No Pain No Game(2013多校3 1010题 离线处理+树状数组求最值)

    No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  7. hdu 5976 Detachment 脑洞题 猜结论

    题目链接 题意 将\(x\)拆成\(a_1+a_2+...+\)的形式,且\(a_1\lt a_2\lt...\),使得\(a_1*a_2*...\)取到最大值 思路 大胆猜结论. 首先拆分的形式中肯 ...

  8. HDU 5200 Trees 二分

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5200 bc(中文):http://bestcoder.hdu.edu.cn/contests ...

  9. HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4031 Problem Description Today is the 10th Annual of ...

随机推荐

  1. akka设计模式系列(Actor模型)

    谈到Akka就必须介绍Actor并发模型,而谈到Actor就必须看一篇叫做<A Universal Modular Actor Formalism for Artificial Intellig ...

  2. 命令框中oracle dmp文件的导入和导出(仅做个人备忘)

    1.dmp文件导出 (全部)exp 用户名/密码 rows=y indexes=n compress=n buffer=65536 feedback=100000  file=F:\test.dmp ...

  3. B-Tree 漫谈 (从二叉树到二叉搜索树到平衡树到红黑树到B树到B+树到B*树)

    关于B树的学习还是需要做点笔记. B树是为磁盘或者其他直接存取辅助存储设备而设计的一种平衡查找树.B树与红黑树的不同在于,B树可以有很多子女,从几个到几千个.比如一个分支因子为1001,高度为2的B树 ...

  4. Linux+Apache+PHP+MySQL服务器环境配置(CentOS篇)

    1.配置php.ini vi /etc/php.ini 2.配置apache 先给需要配置的文件做个备份 cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/h ...

  5. 如何成为一名出色的Oracle数据库管理员

    主要针对Oracle DBA在成长阶段的定位,学习方法等几大方面进行了经典的论述,详细内容请参考下文. 一.定位 Oracle分两大块,一块是开发,一块是管理.开发主要是写写存储过程.触发器什么的,还 ...

  6. JS——input标签注册事件

    注意:淘宝的lable是用定位制作的,事件是oninput事件 <!DOCTYPE html> <html> <head lang="en"> ...

  7. [Windows Server 2012] IIS自带FTP配置方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:IIS自带FT ...

  8. CSS中的disable,hidden,readonly

    项目中有时候需要对某个input进行隐藏或者禁止修改等. 需要隐藏某个input的时候就用hidden <input hidden="true" > 如果要禁止修改in ...

  9. 12--c完数/最大公约数/最小公倍数/素数/回文数

    完数/最大公约数/最小公倍数/素数/回文数 2015-04-08 10:33 296人阅读 评论(0) 收藏 举报  分类: C/C++(60)  哈尔滨工业大学(8)  版权声明:本文为博主原创文章 ...

  10. SpringMVC进行json数据交互

    请求key/value.输出json.此方法在开发中比较常用. 在注解适配器中加入messageConverters <!--注解适配器 --> <bean class=" ...