HDU 5200 脑洞题 离线
线段树,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 脑洞题 离线的更多相关文章
- hdu 5200 Trees [ 排序 离线 2指针 ]
传送门 Trees Accepts: 156 Submissions: 533 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 655 ...
- 图论(KM算法,脑洞题):HNOI 2014 画框(frame)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABPoAAANFCAIAAABtIwXVAAAgAElEQVR4nOydeVxTV/r/n9ertaJEC4
- HDU-1042-N!(Java大法好 && HDU大数水题)
N! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total Subm ...
- 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 ...
- HDU 3938 Portal (离线并查集,此题思路很强!!!,得到所谓的距离很巧妙)
Portal Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- 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 ...
- hdu 5976 Detachment 脑洞题 猜结论
题目链接 题意 将\(x\)拆成\(a_1+a_2+...+\)的形式,且\(a_1\lt a_2\lt...\),使得\(a_1*a_2*...\)取到最大值 思路 大胆猜结论. 首先拆分的形式中肯 ...
- HDU 5200 Trees 二分
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5200 bc(中文):http://bestcoder.hdu.edu.cn/contests ...
- 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 ...
随机推荐
- SpringMvc快速入门之使用篇
文章是为了结合工作需求来介绍springmvc,本文章只是切合实际的开发的场景对springmvc进行快速的入门介绍. 本篇文章不会对原理进行讲解.因为个人觉得有些对于新技术方面可以分为一下几个层次. ...
- 03-vue实例生命周期和vue-resource
vue实例的生命周期 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子:就是生命周期事件的别名而已: 生命周期钩子 = 生命周期函 ...
- ACM_统计字符串
统计字符串 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定n个字符串,统计字符串的个数. 如给定 5 sss ab sss ...
- 浏览器被“hao123.3377.com”主页劫持的解决办法
问题描述: 浏览器被一个叫做hao123.3377的类似hao123网址导航的家伙,强行贴上.狗皮膏药一样. 问题解决: 尝试了网上说的包括下载360什么的,都不咋好用.后来发现是在激活win10(盗 ...
- Struts2 之 实现文件上传(多文件)和下载
Struts2 之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...
- [Codeforces]Codeforces Round #489 (Div. 2)
Nastya and an Array 输出有几种不同的数字 #pragma comment(linker, "/STACK:102400000,102400000") #ifnd ...
- vim下阅读代码时标签跳转设置
1.在fedora14中的 /etc/vimrc下,加入如下几行,可根据源代码工程文件的结构来定 2. 在源代码工程内,输入如下命令 ctags -R 当前目录下将生成一个tags文件 3.查看源代码 ...
- HDU_1394_Minimum Inversion Number_线段树求逆序数
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- vue编辑回显问题
真是疯了,vue怪毛病真多 就下面这玩意儿,多选组合框,新增的时候好用的不行不行的,到了编辑的时候,要回显数据,怪毛病一堆一堆的 首先,回显的时候要传一个数组,但是这个数组里的元素得是字符串类型的,如 ...
- EF入门
1.(安装EF)右键项目