简单的线段树。

记录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. Contoso 大学 - 2 – 实现基本的增删改查

    原文 Contoso 大学 - 2 – 实现基本的增删改查 目录 Contoso 大学 - 使用 EF Code First 创建 MVC 应用 原文地址:http://www.asp.net/mvc ...

  2. UIView-4-EventForViews(在view上加入button时候的事件处理)

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  3. javascript笔记——date以及datetime的比较

    <script src="$!webPath/resources/js/laydate/laydate.js"></script> <script s ...

  4. javascript 中的 call

    Javascript中call的使用 Javascript中call的使用自己感觉蛮纠结的,根据文档很好理解,其实很难确定你是否真正的理解. call 方法应用于:Function 对象调用一个对象的 ...

  5. Article Master Data Deviation

    Site data – Logistics DC / Logistics Store Where is the reference site decided when you maintain the ...

  6. CSS3 弹性盒布局模型(转)

    简介 引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的条目进行排列. 对齐和分配空白空间.即便容器中条目的尺寸未知或是动态变化的,弹性盒布局模型也能正常的工作.在该布局模型中,容器会根 ...

  7. DTCMS中部分IE8不支持webupload上传附件的控件,更改为ajaxfileupload

    dialog\dialog_attach.aspx <!DOCTYPE html> <html> <head> <meta http-equiv=" ...

  8. Winform ComboBox控件高亮显示

    //重绘下拉表单窗口,需要在窗口设计代码中加入下面这一句 this.cmdChannelName.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawF ...

  9. 转 Linux命令及Linux终端的20个趣事

    https://linux.cn/article-2831-1.html 1. 命令:sl (蒸汽机车) 你可能了解 ‘ls’ 命令,并经常使用它来查看文件夹的内容.但是,有些时候你可能会拼写成 ‘s ...

  10. wampsever在win10中安装扩展掉坑

    1.必须要退出wampserver 2.php pecl + 3.wampserver 64 3.0.6