动态修改求区间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. [置顶] IIS应用程序池多工作进程设置及Session共享

    [置顶] IIS应用程序池多工作进程设置及Session共享   在调优iis的时候,朋友分享给我一个特别棒的设置方法步骤,感谢好朋友的分享. IIS应用程序池多工作进程设置及Session共享 1  ...

  2. vscode 插件整理

    己亥年  庚午月 癸巳日  宜入宅 忌婚嫁 1.Chinese (Simplified) Language Pack for Visual Studio Code 此中文(简体)语言包为 VS Cod ...

  3. hibernate4+spring3+struts2搭建框架实例

    1.所需要的JAR包 2.web.xml配置文件,这个和平时的配置是一样的 <?xml version="1.0" encoding="UTF-8"?&g ...

  4. 使用CSS来制作类似「黑幕」的效果

    网上几乎没有看到这类的代码,留个档 .heimu,.heimu a{ background-color: #252525; color:#252525; text-shadow: none; }::s ...

  5. VS第一天(一堆错误的错误示范)

    自学VS第一天 (目标用vs做个不low的简历) 学习视频 https://www.bilibili.com/video/av48489320/?p=1 代码 写了一天的代码,自己理解的内容在注释里 ...

  6. Android自动化测试Uiautomator--UiScrollable接口简介

    UiScrollable主要包括以下几个方面的方法: 1.快速滚动 2.获取列表子元素 3.获取与设置最大滚动次数常量值 4.滑动区域校准常量设置与获取 5.先前与向后滚动 6.滚动到某个对象 7.设 ...

  7. idea xml 一键生成 javabean

    操作步骤 1.复制的xml文件到工程的一个文件下 2.选中文件tools -> XML ACTIONS -> Generate schema from instance Document ...

  8. div+css居中

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Python第三方库之openpyxl(8)

    Python第三方库之openpyxl(8) 饼图 饼图将数据绘制成一个圆片,每个片代表整体的百分比.切片是按顺时针方向绘制的,0在圆的顶部.饼图只能取一组数据.该图表的标题将默认为该系列的标题. 2 ...

  10. [android开发篇]java环境配置

    http://www.runoob.com/java/java-environment-setup.html Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境. window ...