简单的线段树。

记录MinVal 和 相应的ID即可

 /*
线段树
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<math.h>
using namespace std;
typedef long long int64;
//typedef __int64 int64;
typedef pair<int64,int64> PII;
#define MP(a,b) make_pair((a),(b))
const int maxn = ;
const int inf = 0x7fffffff;
const double pi=acos(-1.0);
const double eps = 1e-;
#define L(x) (x<<1)
#define R(x) (x<<1|1) struct Tree{
int l,r,id,val;
}tree[ maxn<< ];
int a[ maxn ]; void build( int L,int R,int n ){
tree[ n ].l = L;
tree[ n ].r = R;
if( L==R ){
tree[ n ].id = L;
tree[ n ].val = a[ L ];
return ;
}
//tree[ n ].val = 0;
int mid = (L+R)/;
build( L,mid,L(n) );
build( mid+,R,R(n) );
if( tree[ L(n) ].val<tree[ R(n) ].val ) {
tree[ n ].val = tree[ L(n) ].val;
tree[ n ].id = tree[ L(n) ].id;
}
else if( tree[ L(n) ].val==tree[ R(n) ].val ){
if( tree[L(n)].id<tree[R(n)].id ){
tree[ n ].val = tree[ L(n) ].val;
tree[ n ].id = tree[ L(n) ].id;
}
else {
tree[ n ].val = tree[ R(n) ].val;
tree[ n ].id = tree[ R(n) ].id;
}
}
else {
tree[ n ].val = tree[ R(n) ].val;
tree[ n ].id = tree[ R(n) ].id;
}
} void update1( int val,int L,int R,int n ){
if( L==R ){
tree[ n ].val += val;
return ;
}
int mid = (L+R)/;
if( tree[n].id<=mid ) update1( val,L,mid,L(n) );
else update1( val,mid+,R,R(n) );
if( tree[ L(n) ].val<tree[ R(n) ].val ) {
tree[ n ].val = tree[ L(n) ].val;
tree[ n ].id = tree[ L(n) ].id;
}
else if( tree[ L(n) ].val==tree[ R(n) ].val ){
if( tree[L(n)].id<tree[R(n)].id ){
tree[ n ].val = tree[ L(n) ].val;
tree[ n ].id = tree[ L(n) ].id;
}
else {
tree[ n ].val = tree[ R(n) ].val;
tree[ n ].id = tree[ R(n) ].id;
}
}
else {
tree[ n ].val = tree[ R(n) ].val;
tree[ n ].id = tree[ R(n) ].id;
}
} void update2( int id,int val,int L,int R,int n ){
if( L==R ){
tree[ n ].val += val;
return ;
}
int mid = (L+R)/;
if( id<=mid ) update2( id,val,L,mid,L(n) );
else update2( id,val,mid+,R,R(n) );
if( tree[ L(n) ].val<tree[ R(n) ].val ) {
tree[ n ].val = tree[ L(n) ].val;
tree[ n ].id = tree[ L(n) ].id;
}
else if( tree[ L(n) ].val==tree[ R(n) ].val ){
if( tree[L(n)].id<tree[R(n)].id ){
tree[ n ].val = tree[ L(n) ].val;
tree[ n ].id = tree[ L(n) ].id;
}
else {
tree[ n ].val = tree[ R(n) ].val;
tree[ n ].id = tree[ R(n) ].id;
}
}
else {
tree[ n ].val = tree[ R(n) ].val;
tree[ n ].id = tree[ R(n) ].id;
}
} void query( int L,int R,int n ){
if( L==R ) return ;
int mid = (L+R)/;
query( L,mid,L(n) );
query( mid+,R,R(n) );
if( tree[ L(n) ].val<tree[ R(n) ].val ) {
tree[ n ].val = tree[ L(n) ].val;
tree[ n ].id = tree[ L(n) ].id;
}
else if( tree[ L(n) ].val==tree[ R(n) ].val ){
if( tree[L(n)].id<tree[R(n)].id ){
tree[ n ].val = tree[ L(n) ].val;
tree[ n ].id = tree[ L(n) ].id;
}
else {
tree[ n ].val = tree[ R(n) ].val;
tree[ n ].id = tree[ R(n) ].id;
}
}
else {
tree[ n ].val = tree[ R(n) ].val;
tree[ n ].id = tree[ R(n) ].id;
}
} int main(){
int T;
int Case = ;
scanf("%d",&T);
while( T-- ){
int n;
scanf("%d",&n);
for( int i=;i<=n;i++ )
scanf("%d",&a[i]);
build( ,n, );
int m;
scanf("%d",&m);
int x,y;
while( m-- ){
scanf("%d%d",&x,&y);
if( x== ) update1( y,,n, );
else update2( x,y,,n, );
}
query( ,n, );
printf("Case %d: %d %d\n",Case++,tree[].id,tree[].val);
}
return ;
}

FZU-1921+线段树的更多相关文章

  1. FZU 2171 线段树 区间更新求和

    很模板的题 在建树的时候输入 求和后更新 #include<stdio.h> #include<string.h> #include<algorithm> #inc ...

  2. FZU 2171(线段树的延迟标记)

    题意:容易理解. 分析:时隔很久,再一次写了一道线段树的代码,之前线段树的题也做了不少,包括各种延迟标记,但是在组队分任务之后,我们队的线段树就交给了另外一个队友在搞, 然后我就一直没去碰线段树的题了 ...

  3. FZU 2105 (线段树)

     Problem 2105 Digits Count  Problem Description Given N integers A={A[0],A[1],...,A[N-1]}. Here we h ...

  4. HDU 3974 Assign the task(简单线段树)

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  5. FZU 1921——栀子花开——————【线段树单点更新】

    栀子花开 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status  ...

  6. ACM: FZU 2105 Digits Count - 位运算的线段树【黑科技福利】

     FZU 2105  Digits Count Time Limit:10000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

  7. F - Change FZU - 2277 (DFS序+线段树)

    题目链接: F - Change FZU - 2277 题目大意: 题意: 给定一棵根为1, n个结点的树. 有q个操作,有两种不同的操作 (1) 1 v k x : a[v] += x, a[v ' ...

  8. FZU 2105 Digits Count(按位维护线段树)

    [题目链接] http://acm.fzu.edu.cn/problem.php?pid=2105 [题目大意] 给出一个序列,数字均小于16,为正数,每次区间操作可以使得 1. [l,r]区间and ...

  9. FZu Problem 2236 第十四个目标 (线段树 + dp)

    题目链接: FZu  Problem 2236 第十四个目标 题目描述: 给出一个n个数的序列,问这个序列内严格递增序列有多少个?不要求连续 解题思路: 又遇到了用线段树来优化dp的题目,线段树节点里 ...

  10. FZU 2105 Digits Count(线段树)

    Problem 2105 Digits Count Accept: 302 Submit: 1477 Time Limit: 10000 mSec Memory Limit : 262144 KB P ...

随机推荐

  1. (转)C# 数据类型映射 (SQLite,MySQL,MSSQL,Oracle)

    一.C# vs SQLite: C# SQLite 字段名 类型 库类型 GetFieldType(#) 转换 备注 F_BOOL bool BIT NOT NULL Boolean F_BOOL_N ...

  2. 免费的HTML5连载来了《HTML5网页开发实例详解》连载(五)图解通过Fiddler加速开发

    Fiddler是Windows底下最强大的请求代理调试工具,监控任何浏览器的HTTP/HTTPS流量,窜改客户端请求和服务器响应,解密HTTPS Web会话,图4.44为Fiddler原理示意图. 图 ...

  3. java内部类的定义原则

    /*内部类的访问规则:1,内部类可以直接访问外部类中的成员,包括私有.    之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式 外部类名.this2,外部类要访问内部类,必 ...

  4. [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组

    1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一 ...

  5. 2014-10 u-boot 顶层config.mk分析

    /** ****************************************************************************** * @author    Maox ...

  6. 一句话解释jquery中offset、pageX, pageY、position、scrollTop, scrollLeft的区别

    offset   元素相对文档的偏移 pageX, pageY 事件(鼠标)相对文档的偏移 注意:文档是指document, 而不是当前窗口,是包含了滚动位置的,即滚动条的位置对这些值是不产生影响的 ...

  7. 转发 PHP 资料(一)

    WebShell隐藏思路.webshell磁盘读写动态检测.webshell沙箱动态检测(2)   作为WebShell检测.CMS修复.WebShell攻防研究学习的第二篇文章 本文旨在研究Webs ...

  8. Beaglebone Back学习五(PWM测试)

    PWM测试 参考链接 1 Enable PWM on BeagleBone with Device Tree overlays 2Using PWM on the Beaglebone Black 3 ...

  9. centos6.5安装配置LDAP服务[转]

    安装之前查一下 1 find / -name openldap* centos6.4默认安装了LDAP,但没有装ldap-server和ldap-client 于是yum安装 1 su root 2 ...

  10. js时间格式的转换

    function System_dateInit(value) {     if (value != null) {         var d = new Date(value);          ...