hdu-5200
来源:互联网 发布:网络政治参与方式 编辑:程序博客网 时间:2024/04/25 17:17
求删除1~n中任意点后剩下的连续段数。
主要思路,删除i时,若i前后都未删除,结果+1;若前后都已删除,结果-1.
/*题意:给n棵树的高度,m个数,每个数是询问减掉高度小于该数的树后, 连续树目的段数,且前后的询问不互相影响。思路:对树高度排序,询问也离线进行排序,然后从头删除树木。 最终的实现思路是,如果当前删除的树两边有树则+1, 如果当前树两边都没树则-1.*/#include<iostream>#include<string.h>#include<stdio.h>#include<map>#include<vector>#include<algorithm>using namespace std;#define ll long long#define N 50005pair<ll,int> f[N];pair<ll,int> Q[N];ll have[N];int res[N];bool cmp(pair<ll,int> a,pair<ll,int> b){ return a.first<b.first;}int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ for(int i=1;i<=n;i++) { scanf("%I64d",&f[i].first); f[i].second=i; have[i]=1; } have[0]=0; have[n+1]=0; for(int i=1;i<=m;i++) { scanf("%I64d",&Q[i].first); Q[i].second=i; } sort(f+1,f+1+n,cmp); sort(Q+1,Q+1+m,cmp); int st=0; int ans=1; for(int i=1;i<=m;i++) { for(int j=st+1;j<=n;j++) { if(f[j].first>Q[i].first) break; if(have[f[j].second-1]&&have[f[j].second+1]) ans++; else if(!have[f[j].second-1]&&!have[f[j].second+1]) ans--; have[f[j].second]=0; st++; } res[Q[i].second]=ans; } for(int i=1;i<=m;i++) { printf("%d\n",res[i]); } } return 0;}
0 0
- HDU 5200
- hdu-5200
- HDU 5200 Trees
- hdu 5200 Trees
- hdu 5200(离线处理)
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- (1.5.2.7)最大公约数
- 使用jquery获取url以及使用jquery获取url参数以及中文编码乱码的问题
- LeetCode算法题之Next Permutation
- 将 text 文件里的数据导入到 mysql 数据库中
- UITextField
- hdu-5200
- iOS开发之监听键盘高度的变化
- ubuntu+codeblocks+libcurl FTP上传文件
- JDK及Tomcat环境变量的配置
- OJ--译码
- UIButton
- 最小生成树-克鲁斯卡尔算法(kruskal's algorithm)实现
- UIAlertView、UIActionSheet
- linux vi 编辑器