/*
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的更多相关文章

  1. BZOJ 3489: A simple rmq problem

    3489: A simple rmq problem Time Limit: 40 Sec  Memory Limit: 600 MBSubmit: 1594  Solved: 520[Submit] ...

  2. UVA 11235Frequent values(RMQ)

    训练指南P198 题意:给出一个非降序排列的整数数组a1, a2…… an,你的任务是对于一系列询问(i,j),回答ai, ai+1 ……aj 中出现的次数最多的次数 这题不仅学到了rmq的应用还学到 ...

  3. 51nod1174(RMQ)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1174 题意:中文题诶- 思路:RMQ模板题 关于RMQ: h ...

  4. 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 ...

  5. 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 ...

  6. (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[ ...

  7. 洛谷P2412 查单词 [trie树 RMQ]

    题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...

  8. POJ3368Frequent values[RMQ 游程编码]

    Frequent values Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 17581   Accepted: 6346 ...

  9. [tem]RMQ(st)

    倍增思想 代码中有两个测试 #include <iostream> #include <cmath> using namespace std; const int N=1e5; ...

随机推荐

  1. dedecms安装步骤

    GD支持:PHP设置-PHP扩展-php_gd2 初始化数据体验包:点击下载:或者点击取消     如果是本地安装在数据库的在数据库用户名选择默认的(root),密码为空 主要是如果是基于远程服务器的 ...

  2. Maven POM.xml (转)

    简介 pom.xml文件是Maven进行工作的主要配置文件.在这个文件中我们可以配置Maven项目的groupId.artifactId和version等Maven项目必须的元素:可以配置Maven项 ...

  3. 阿里云 mysql 无缘无故挂掉

    近期在登录自己博客时,老是报数据库连接失败,然后重启服务器就好了.但是,重启服务器很耗时间,不方便,不能每次都重启吧于是远程连接服务器看了一下原来是数据库服务挂掉了启动时还报错于是查看了下错误日志 2 ...

  4. Jquery 1.11.1 Checkbox checked 判断

    if($(this).prop('checked'))

  5. asp.net 音乐播放器

    <HTML> <HEAD><TITLE>Playback Example</TITLE> </HEAD> <BODY> < ...

  6. C# ACM poj1006

    中国剩余定理 public static void acm1006(int a, int b, int c, int d) { * ; * ; * ; * * ; ) * z; ) * y; ) * ...

  7. 学习C++ Primer 的个人理解(六)

    第四章和第五章没什么特别的.基本上就是书本上的字面意思,也没什么需要注意的细节.直接记录第六章. 本章介绍了函数,其实也没什么特别的.但有几个重点 1.形参的类型决定了形参和实参的交互方式.形参是引用 ...

  8. 九度OJ 1214 寻找丑数【算法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1214 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因 ...

  9. 利用javascript Location访问Url,重定向,刷新页面

    网上转来了, 方便以后查询参考 本文介绍怎么使用javascript Location对象读和修改Url.怎么重载或刷新页面.javascript提供了许多方法访问,修改当前用户在浏览器中访问的url ...

  10. 使用WebClient上传文件并同时Post表单数据字段到服务端

    之前遇到一个问题,就是使用WebClient上传文件的同时,还要Post表单数据字段,一开始以为WebClient可以直接做到,结果发现如果先 Post表单字段,就只能获取到字段及其值,如果先上传文件 ...