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; ...
随机推荐
- 在centos中php 在连接mysql的时候,出现Can't connect to MySQL server on 'XXX' (13)
原文连接:http://hi.baidu.com/zwfec/item/64ef5ed9bf1cb3feca0c397c 红色的是命令 SQLSTATE[HY000] [2003] Can't con ...
- 不关闭seLinux解决vsftpd服务本地用户不能登录问题(500 OOPS: cannot change directory:/home/***
这里不讲vsftpd的基本配置,网上教程已经太多了.这里只说seLinux的问题. 日前在CentOS6.5中安装了vsftpd,按照网上搜索的教程,配置好/etc/vsftpd/vsftpd.con ...
- SecureCRT 7 注册码
Name: Sherrill Ray Company: 空 Serial Number:03-40-084141 License Key: ABWGUE ZPPZ6X XHTN2S 1N7PER A ...
- SQL SERVER 主键约束
主键约束: 遵循关系型模型中的第二范式.唯一的识别一条记录,不能为空. CREATE TABLE Persons ( Id_P int NOT NULL PRIMARY KEY, LastName v ...
- js中的FileSystemObject使用(FSO)
Set fso = Server.CreateObject("Scripting.FileSystemObject") 定义FSO对象 fso.CreateFolder(Serve ...
- SQL IF UPDATE(Number) 在触发器[Trigger]中的用法
IF UPDATE(Number)在触发器(TRIGGER)中用处很大 CREATE TRIGGER TrgTest ON [TableName] FOR UPDATE IF UPDATE(Colum ...
- ###STL学习--关联容器
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭 ...
- 安装sinopia-ldap
背景: 已经安装好sinopia,配置好本地npm源 安装sinopia-ldap: npm install -g sinopia-ldap 配置: 修改sinopia的配置文件config.yaml ...
- 初学java,遇到的陌生词语(1)
字节码文件:不包含硬件信息,完全与硬件平台无关,因此,无法直接由操作系统来运行. Java应用程序的执行过程:代码装入.代码检验.代码执行. 1.代码装入:由类装配器完成,装入程序运行时所需的所有源代 ...
- 02_线程的创建和启动_继承Thread方式
[简述] java使用Thread类代表线程,所有的线程都必须是Thread或者其子类的实例. 每个线程的任务就是完成一定的任务,实际上就是执行一段程序流. [创建并启动多线程的步骤(集成Thread ...