hdu5412CRB and Queries
动态修改求区间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的更多相关文章
- 实践 HTML5 的 CSS3 Media Queries
先来介绍下 media,确切的说应该是 CSS media queries(CSS 媒体查询),媒体查询包含了一个媒体类型和至少一个使用如宽度.高度和颜色等媒体属性来限制样式表范围的表达式.CSS3 ...
- SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问
delphi ado 跨数据库访问 语句如下 ' and db = '帐套1' 报错内容是:SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATE ...
- CSS3 Media Queries 实现响应式设计
在 CSS2 中,你可以为不同的媒介设备(如屏幕.打印机)指定专用的样式表,而现在借助 CSS3 的 Media Queries 特性,可以更为有效的实现这个功能.你可以为媒介类型添加某些条件,检测设 ...
- 使用CSS3 Media Queries实现网页自适应
原文来源:http://webdesignerwall.com 翻译:http://xinyo.org 当今银屏分辨率从 320px (iPhone)到 2560px (大屏显示器)或者更大.人们也不 ...
- SQL Queries from Transactional Plugin Pipeline
Sometimes the LINQ, Query Expressions or Fetch just doesn't give you the ability to quickly query yo ...
- Media Queries 详解
Media Queries直译过来就是“媒体查询”,在我们平时的Web页面中head部分常看到这样的一段代码: <link href="css/reset.css" rel ...
- 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 ...
- 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 ...
- 【Codeforces710F】String Set Queries (强制在线)AC自动机 + 二进制分组
F. String Set Queries time limit per test:3 seconds memory limit per test:768 megabytes input:standa ...
随机推荐
- PAT (Basic Level) Practise (中文)-1037. 在霍格沃茨找零钱(20)
PAT (Basic Level) Practise (中文)-1037. 在霍格沃茨找零钱(20) http://www.patest.cn/contests/pat-b-practise/1037 ...
- Ckeditor for Drupal
Ckeditor for Drupal 关于Drupal的所见即所得编辑器,Ckeditor是一个不错的选择,而且可以在Ckeditor官网直接下载到专为Drupal制作的版本: http:/ ...
- Bootstrap 网格系统(Grid System)实例2
Bootstrap 网格系统(Grid System):堆叠水平,两种样式 <!DOCTYPE html><html><head><meta http-equ ...
- dedeCMS数据库字段详细介绍
dede_addonarticle 附加文章表 aid int(11) 文章编号 typeid int(11) 分类栏目编号 body mediumtext 文章内容 dede_addonflash ...
- clipboard 在 vue 中的使用
简介 页面中用 clipboard 可以进行复制粘贴,clipboard能将内容直接写入剪切板 安装 npm install --save clipboard 使用方法一 <template&g ...
- Python、机器学习、计算机视觉、深度学习入门
1.简明Python教程 2.Python计算机视觉编程 3.机器学习实践 4.吴恩达机器学习 5.李飞飞深度学习与计算机视觉
- Hive和Hbase整合
Hive只支持insert和delete操作,并不支持update操作,所以无法实施更新hive里的数据,而HBASE正好弥补了这一点,所以在某些场景下需要将hive和hbase整合起来一起使用. 整 ...
- UIBarButtonSystemItem 样式
使用时需要注意创建方式的区别: 01 typedef enum { 02 UIBarButtonSystemItemDone, 03 UIBarButtonSystemItemCanc ...
- linux中软件包管理
一.流行的软件包管理有两种: Debian Linux的Deb软件包和 Redhat Linux的Rpm软件包, Debian Linux首先提出将应用程序的二进制文件.配置文档.man/info帮助 ...
- 虚拟机里linux系统安装 CentOS 64-bit(6.4版本)——笔记
使用的虚拟机是VMware WorkStation 9.0(9.0.0 build-812388) 1. 安装过程中 选择 桥接 此系统可以拥有独立ip.Nat模式跟主机ip一样 2. 安装过程中选择 ...