动态修改求区间K大。

整体二分是一个神奇的东西: http://www.cnblogs.com/zig-zag/archive/2013/04/18/3027707.html

入门:

一般的主席树都挂了,而且又难写。

南神的分析:http://blog.csdn.net/hdu2014/article/details/47834431 ORZ

然后对着板子写了一份:

1 #include<iostream>

  2 #include<cstdio>
  3 #include<algorithm>
  4 #include<cmath>
  5 #include<cstring>
  6 #define maxn 450000
  7 #define inf 2000000000
  8 typedef long long ll;
  9 
 10 using namespace std;
 11 struct query
 12 {
 13     int x,y,k,s,tp,cur;
 14 }q[maxn],q1[maxn],q2[maxn];
 15 int a[maxn],ans[maxn],tmp[maxn],t[maxn];
 16 int n,m,num,cnt;
 17 
 18 void add(int x,int y)
 19 {
 20     for (int i=x;i<=n;i+=i&(-i)) t[i]+=y;
 21 }
 22 int ask(int x)
 23 {
 24     int s=;
 25     for (int i=x;i>;i-=i&(-i)) s+=t[i];
 26     return s;
 27 }
 28 
 29 void divide(int head,int tail,int l,int r)
 30 {
 31     if (head>tail) return;
 32     if (l==r)
 33     {
 34         for (int i=head;i<=tail;i++)
 35             if (q[i].tp==) ans[q[i].s]=l;
 36         return;
 37     }
 38     int mid=(l+r)>>;
 39     for (int i=head;i<=tail;i++)
 40     {
 41         if (q[i].tp==&&q[i].y<=mid) add(q[i].x,);
 42         else
 43         if (q[i].tp==&&q[i].y<=mid) add(q[i].x,-);
 44         else
 45         if (q[i].tp==) tmp[i]=ask(q[i].y)-ask(q[i].x-);
 46     }
 47 
 48     for (int i=head;i<=tail;i++)
 49     {
 50         if (q[i].tp==&&q[i].y<=mid) add(q[i].x,-);
 51         else
 52         if (q[i].tp==&&q[i].y<=mid) add(q[i].x,);
 53     }
 54 
 55     int l1,l2;
 56     l1=l2=;
 57     for (int i=head;i<=tail;i++)
 58     if (q[i].tp==)
 59     {
 60        if (q[i].cur+tmp[i]>q[i].k-) q1[++l1]=q[i];
 61        else
 62        {
 63            q[i].cur+=tmp[i];
 64            q2[++l2]=q[i];
 65        }
 66     }
 67     else
 68     {
 69         if (q[i].y<=mid) q1[++l1]=q[i];
 70         else q2[++l2]=q[i];
 71     }
 72 
 73     for (int i=;i<=l1;i++) q[head+i-]=q1[i];
 74     for (int i=;i<=l2;i++) q[head+i+l1-]=q2[i];
 75     divide(head,head+l1-,l,mid);
 76     divide(head+l1,tail,mid+,r);
 77 }
 78 
 79 int main()
 80 {
 81     while (scanf("%d",&n)!=EOF)
 82     {
 83         for (int i=;i<=n;i++) t[i]=;
 84         memset(q,,sizeof(q));
 85         memset(q1,,sizeof(q1));
 86         memset(q2,,sizeof(q2));
 87 
 88         num=cnt=;
 89         for (int i=;i<=n;i++)
 90         {
 91             scanf("%d",&a[i]);
 92             q[++num].x=i,q[num].y=a[i];
 93             q[num].tp=;q[num].s=;
 94         }
 95         int ss,x,y,z;
 96         scanf("%d",&m);
 97         for (int i=;i<=m;i++)
 98         {
 99             scanf("%d",&ss);
             if (ss==)
             {
                 scanf("%d%d%d",&x,&y,&z);
                 q[++num].x=x,q[num].y=y,q[num].k=z;
                 q[num].tp=;q[num].s=++cnt;
             }
             else
             {
                 scanf("%d%d",&x,&y);
                 q[++num].x=x;
                 q[num].y=a[x];
                 q[num].tp=;q[num].s=;
                 q[++num].x=x,q[num].y=y;
                 q[num].tp=,q[num].s=;
                 a[x]=y;
             }
         }
 
         divide(,num,,inf);
         for (int i=;i<=cnt;i++)
             printf("%d\n",ans[i]);
     }
     return ;

123 }

2s左右。

hdu5412CRB and Queries的更多相关文章

  1. 实践 HTML5 的 CSS3 Media Queries

    先来介绍下 media,确切的说应该是 CSS media queries(CSS 媒体查询),媒体查询包含了一个媒体类型和至少一个使用如宽度.高度和颜色等媒体属性来限制样式表范围的表达式.CSS3 ...

  2. SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问

    delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...

  3. CSS3 Media Queries 实现响应式设计

    在 CSS2 中,你可以为不同的媒介设备(如屏幕.打印机)指定专用的样式表,而现在借助 CSS3 的 Media Queries 特性,可以更为有效的实现这个功能.你可以为媒介类型添加某些条件,检测设 ...

  4. 使用CSS3 Media Queries实现网页自适应

    原文来源:http://webdesignerwall.com 翻译:http://xinyo.org 当今银屏分辨率从 320px (iPhone)到 2560px (大屏显示器)或者更大.人们也不 ...

  5. SQL Queries from Transactional Plugin Pipeline

    Sometimes the LINQ, Query Expressions or Fetch just doesn't give you the ability to quickly query yo ...

  6. Media Queries 详解

    Media Queries直译过来就是“媒体查询”,在我们平时的Web页面中head部分常看到这样的一段代码:  <link href="css/reset.css" rel ...

  7. SPOJ GSS3 Can you answer these queries III[线段树]

    SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...

  8. SPOJ GSS1 Can you answer these queries I[线段树]

    Description You are given a sequence A[1], A[2], ..., A[N] . ( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ). A q ...

  9. 【Codeforces710F】String Set Queries (强制在线)AC自动机 + 二进制分组

    F. String Set Queries time limit per test:3 seconds memory limit per test:768 megabytes input:standa ...

随机推荐

  1. bootstrap历练实例: 导航元素中禁用的链接

    对每个 .nav class,如果添加了 .disabled class,则会创建一个灰色的链接,同时禁用了该链接的 :hover 状态, <!DOCTYPE html><html& ...

  2. HTML5 Geolocation(地理位置)

    HTML5 Geolocation(地理位置).是用来定位用户的位置的. HTML5 Geolocation API 用于获得用户的地理位置,鉴于该特性可能侵犯用户的隐私权,除非用户同意,否则不能获取 ...

  3. CS193p Lecture 6 - UINavigation, UITabBar

    抽象类(Abstract):指的是这个类不能被实例化,只能被继承: OC中没有关键词来标明某个类是抽象类,只能在注释中标注一下: 抽象类中的抽象方法,必须是public的,使方法称为public的方法 ...

  4. [九省联考2018] IIIDX 线段树+贪心

    题目: 给出 k 和 n 个数,构造一个序列使得 d[i]>=d[i/k] ,并且字典序最大. 分析: 听说,当年省选的时候,这道题挡住了大批的高手,看上去十分简单,实际上那道弯段时间内是转不过 ...

  5. [php] 接口及方法和抽象类及方法的异同点

    比较项目 接口 抽象类 方法是否有实体 无 抽象方法无实体,非抽象方法可以有实体 方法开闭性 public public,protected,private 重载方法的开闭性 public 必须与父类 ...

  6. Python、机器学习、计算机视觉、深度学习入门

    1.简明Python教程 2.Python计算机视觉编程 3.机器学习实践 4.吴恩达机器学习 5.李飞飞深度学习与计算机视觉

  7. Python面向对象(成员)(二)

    1. 成员 在类中你能写的所有内容都是类的成员 2. 变量 1. 实例变量: 由对象去访问的变量. class Person: def __init__(self, name, id, gender, ...

  8. Python基本运算符和流程控制

    常量 常量即不可改变的量,在Python中不存在常量,我们只能逻辑上规定一个常量并不去修改它,通常用全大写字母表示. 基本运算符之二 算术运算 运算符 说明 ** 幂运算 *, /, //, % 乘. ...

  9. 洛谷P3961 图的遍历

    题目来源 做这道题的方法不少. 在这里我只提一种 就是大法师. 可以采用反向建边,从最大的点开始dfs 我们考虑每次从所剩点中最大的一个点出发,我们暂且称它为i,而凡是i这个点所能到达的点,可以到达的 ...

  10. [转]构建Python+Selenium2自动化测试环境(一)

    很久没有了解自动化了,最近发现项目中沉淀了很多东西,回归测试效 率很低,所以必须要考虑构建自动化来提供各个环节的小效率.由于忙于需求以及产品的流程规范,现在对于测试技术方面的研究也相对少了很多.不过不 ...