POJ2201+RMQ
/*
RMQ
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std;
const int maxn = ;
struct Node{
int ki,ai,id;
}node[ maxn ];
int dp[ maxn ][ ];
int bit[ ];
int ans[ maxn ][ ]; void init(){
memset( ans,,sizeof( ans ) );
bit[] = ;
for( int i=;i<;i++ )
bit[ i ] = bit[ i- ]*;
return ;
} int cmp( Node a,Node b ){
return a.ki<b.ki;
} void ST( int n ){
int K = (int)(log( 1.0*n )/log( 2.0 ));
for( int i=;i<=n;i++ )
dp[ i ][ ] = i;//存储着i,j之间ai值最小的位置
for( int j=;j<=K;j++ ){
for( int i=;i<=n-bit[j]+;i++ ){
if( node[ dp[i][j-] ].ai<node[ dp[i+bit[j-]][j-] ].ai )
dp[ i ][ j ] = dp[i][j-];
else
dp[ i ][ j ] = dp[i+bit[j-]][j-];
}
}
} int RMQ( int l,int r ){
int k = (int)(log((+r-l)*1.0)/log(2.0));
if( node[ dp[l][k] ].ai<node[ dp[r-bit[k]+][k] ].ai ) return dp[l][k];
else return dp[r-bit[k]+][k];
} int solve( int fa,int l,int r ){
if( l>r ) return ;
int pos = RMQ( l,r );
int id = node[pos].id;
ans[ id ][ ] = fa;
ans[ id ][ ] = solve( id,l,pos- );
ans[ id ][ ] = solve( id,pos+,r );
return id;
} int main(){
int n;
init();
while( scanf("%d",&n)!=EOF ){
for( int i=;i<=n;i++ ){
scanf("%d%d",&node[i].ki,&node[i].ai);
node[i].id = i;
}
sort( node+,node+n+,cmp );
ST( n );
solve( ,,n );
puts("YES");
for( int i=;i<=n;i++ ){
printf("%d %d %d\n",ans[i][],ans[i][],ans[i][]);
}
}
return ;
}
改变了dp中存储的内容
/*
RMQ
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std;
const int maxn = ;
struct Node{
int ki,ai,id;
}node[ maxn ];
int dp[ maxn ][ ];
int bit[ ];
int ans[ maxn ][ ];
int Ai[ ];
const int MAX = ; void init(){
memset( ans,,sizeof( ans ) );
bit[] = ;
for( int i=;i<;i++ )
bit[ i ] = bit[ i- ]*;
return ;
} int cmp( Node a,Node b ){
return a.ki<b.ki;
} void ST( int n ){
int K = (int)(log( 1.0*n )/log( 2.0 ));
for( int i=;i<=n;i++ )
dp[ i ][ ] = node[i].ai;//存储着i,j之间ai值最小的位置
for( int j=;j<=K;j++ ){
for( int i=;i<=n-bit[j]+;i++ ){
dp[ i ][ j ] = min( dp[i][j-],dp[i+bit[j-]][j-]);
}
}
} int RMQ( int l,int r ){
int k = (int)(log((+r-l)*1.0)/log(2.0));
int value = min( dp[l][k],dp[r-bit[k]+][k] );
return Ai[ value+MAX ];
} int solve( int fa,int l,int r ){
if( l>r ) return ;
int pos = RMQ( l,r );
int id = node[pos].id;
ans[ id ][ ] = fa;
ans[ id ][ ] = solve( id,l,pos- );
ans[ id ][ ] = solve( id,pos+,r );
return id;
} int main(){
int n;
init();
while( scanf("%d",&n)!=EOF ){
for( int i=;i<=n;i++ ){
scanf("%d%d",&node[i].ki,&node[i].ai);
node[i].id = i;
//Ai[ node[i].ai ] = i;
}
sort( node+,node+n+,cmp );
for( int i=;i<=n;i++ )
Ai[ node[i].ai+MAX ] = i;
ST( n );
solve( ,,n );
puts("YES");
for( int i=;i<=n;i++ ){
printf("%d %d %d\n",ans[i][],ans[i][],ans[i][]);
}
}
return ;
}
POJ2201+RMQ的更多相关文章
- BZOJ 3489: A simple rmq problem
3489: A simple rmq problem Time Limit: 40 Sec Memory Limit: 600 MBSubmit: 1594 Solved: 520[Submit] ...
- UVA 11235Frequent values(RMQ)
训练指南P198 题意:给出一个非降序排列的整数数组a1, a2…… an,你的任务是对于一系列询问(i,j),回答ai, ai+1 ……aj 中出现的次数最多的次数 这题不仅学到了rmq的应用还学到 ...
- 51nod1174(RMQ)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1174 题意:中文题诶- 思路:RMQ模板题 关于RMQ: h ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1008 Function 二分+RMQ
Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...
- Gym 100646 F Tanks a Lot RMQ
Problem F: Tanks a Lot Imagine you have a car with a very large gas tank - large enough to hold what ...
- (RMQ版)LCA注意要点
inline int lca(int x,int y){ if(x>y) swap(x,y); ]][x]]<h[rmq[log[y-x+]][y-near[y-x+]+]])? rmq[ ...
- 洛谷P2412 查单词 [trie树 RMQ]
题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...
- POJ3368Frequent values[RMQ 游程编码]
Frequent values Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17581 Accepted: 6346 ...
- [tem]RMQ(st)
倍增思想 代码中有两个测试 #include <iostream> #include <cmath> using namespace std; const int N=1e5; ...
随机推荐
- mvc模式实现
listdemo.html负责显示,listModel.class.php负责从数据库存储数据和查找数据,mysql.class.php是操作数据库的类,但不直接使用,model类调用mysql,li ...
- h2database源码浅析:MVTable与MVIndex
Database包含一个Store:MVTableEngine.Store getMvStore() MVTableEngine.Store可以获取各tables:java.util.HashMap& ...
- lookup:ID列
对lookup列对应的ID列的引用的写法 if (item["NavType_x003a_ID"].ToString() == type["ID"].ToStr ...
- myeclipse 右键 Add Struts... 页面报404 错误
网上试了很多种方法都不对,结果老师两下点出来了 我的改正方法是: 将WebRoot/WEB-INF/web.xml中的 <url-pattern>/*</url-pattern> ...
- java.lang.StringBuffer源码分析
StringBuffer是一个线程安全的可变序列的字符数组对象,它与StringBuilder一样,继承父类AbstractStringBuilder.在多线程环境中,当方法操作是必须被同步,Stri ...
- Volley网络请求框架的基本用法
备注: 本笔记是参照了 http://blog.csdn.net/ysh06201418/article/details/46443235 学习之后写下的 简介: Volley是google官网退 ...
- Percona-Server-5.5.33二进制安装
一.删除percona server 1.关闭mysqld service mysqld stop,再删除 rm -rf /etc/my.cnf 2.删除rm -rf /usr/local/Perc ...
- mysql---字符集详解
常用的字符集包括ASCII ,GB2312 , GBK , UTF-8 ,Unicode 首先要知道 ASCII编码: 用一个字节来标识0-9的数字.大小写字母.及一些标点和不可见字符.1个字节8位, ...
- Swift 学习笔记1
最近在看Swift,努力在看相关的文档以及书籍,因为Swift3.0的更新,以及它开源了,所以打算写一些关于Swift的相关文章.让Swift能够更好的被我理解
- SharePoint2013TimerJob计时器发送邮件
http://www.3fwork.com/b500/000307MYM008190/