Luogu P1886 滑动窗口
P1886 滑动窗口
现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。
例如:
The array is [1 3 -1 -3 5 3 6 7], and k = 3.

输入输出格式
输入格式:
输入一共有两行,第一行为n,k。
第二行为n个数(<INT_MAX).
输出格式:
输出共两行,第一行为每次窗口滑动的最小值
第二行为每次窗口滑动的最大值
输入输出样例
8 3
1 3 -1 -3 5 3 6 7
-1 -3 -3 -3 3 3
3 3 5 5 6 7
说明
50%的数据,n<=10^5
100%的数据,n<=10^6
 //#pragma GCC optimize("O1")
 //#pragma GCC optimize("O2")
 //#pragma GCC optimize("O3")
 #include<cstdio>
 #include<cstring>
 #include<iostream>
 #include<algorithm>
 #include<ctime>
 #include<cmath>
 #include<vector>
 #include<queue>
 //#include<stack>
 //#include<map>
 #define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a))
 #define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a))
 #define Ii inline int
 #define Iv inline void
 #define Il inline long long
 #define Ib inline bool
 #define INF 0x3f3f3f3f
 #define re register
 #define ll long long
 #define Max(a,b) ((a)>(b)?(a):(b))
 #define Min(a,b) ((a)<(b)?(a):(b))
 template<class Tp>Iv Cmax(Tp &a,Tp b){((a)=(a)>(b)?(a):(b));}
 template<class Tp>Iv Cmin(Tp &a,Tp b){((a)=(a)<(b)?(a):(b));}
 #define Fill(a,b) memset((a),(b),sizeof((a)))
 #define D_e_Line printf("\n-------------\n");
 #define D_e(x) printf("\n______%d_______\n",x)
 #define Pause system("pause")
 #define lson l,mid,rt<<1
 #define rson mid+1,r,rt<<1|1
 using namespace std;
 const int N=;
 Ii read(){
     int s=,f=;char c;
     for(c=getchar();c>''||c<'';c=getchar())if(c=='-')f=-;
     while(c>=''&&c<='')s=s*+(c^''),c=getchar();
     return s*f;
 }
 template<class Tp>Iv print(Tp x){
     if(x<)putchar('-'),x=-x;
     if(x>)print(x/);
     putchar(x%^'');
 }
 int t_max[N<<],t_min[N<<];
 Iv pushup(int rt){
     t_max[rt]=Max(t_max[rt<<],t_max[rt<<|]),
     t_min[rt]=Min(t_min[rt<<],t_min[rt<<|]);
 }
 Iv updata(int x,int w,int l,int r,int rt){
     if(l==r){t_max[rt]+=w,t_min[rt]+=w;return;}
     int mid=l+r>>;
     x<=mid?updata(x,w,lson):updata(x,w,rson) ;
     pushup(rt);
 }
 Ii query_max(int L,int R,int l,int r,int rt){
     if(L<=l&&r<=R)return t_max[rt];
     int mid=l+r>>,maxium=-INF;
     if(L<=mid)Cmax(maxium,query_max(L,R,lson));
     if(R>mid)Cmax(maxium,query_max(L,R,rson));
     return maxium;
 }
 Ii query_min(int L,int R,int l,int r,int rt){
     if(L<=l&&r<=R)return t_min[rt];
     int mid=l+r>>,minium=INF;
     if(L<=mid)Cmin(minium,query_min(L,R,lson));
     if(R>mid)Cmin(minium,query_min(L,R,rson));
     return minium;
 }
 int main(){
     int n=read(),K=read();
     R(i,,n)
         updata(i,read(),,n,);
     int l=,r=K;
     while(){
         printf("%d ",query_min(l,r,,n,));
         ++l,++r;
         if(r>n)break;
     }
     putchar('\n');
     l=,r=K;
     while(){
         printf("%d ",query_max(l,r,,n,));
         ++l,++r;
         if(r>n)break;
     }
     return ;
 }
SegmentTree_80.cpp
 //#pragma GCC optimize("O1")
 //#pragma GCC optimize("O2")
 //#pragma GCC optimize("O3")
 #include<cstdio>
 #include<cstring>
 #include<iostream>
 #include<algorithm>
 #include<ctime>
 #include<cmath>
 //#include<vector>
 //#include<queue>
 //#include<stack>
 //#include<map>
 #define R(a,b,c) for(register int (a)=(b);(a)<=(c);++(a))
 #define nR(a,b,c) for(register int (a)=(b);(a)>=(c);--(a))
 #define Ii inline int
 #define Iv inline void
 #define Il inline long long
 #define Ib inline bool
 #define INF 0x3f3f3f3f
 #define re register
 #define ll long long
 #define Max(a,b) ((a)>(b)?(a):(b))
 #define Min(a,b) ((a)<(b)?(a):(b))
 template<class Tp>Iv Cmax(Tp &a,Tp b){((a)=(a)>(b)?(a):(b));}
 template<class Tp>Iv Cmin(Tp &a,Tp b){((a)=(a)<(b)?(a):(b));}
 #define Fill(a,b) memset((a),(b),sizeof((a)))
 #define D_e_Line printf("\n-------------\n");
 #define D_e(x) printf("\n______%d_______\n",x)
 #define Pause system("pause")
 #define lson l,mid,rt<<1
 #define rson mid+1,r,rt<<1|1
 using namespace std;
 const int N=;
 Ii read(){
     int s=,f=;char c;
     for(c=getchar();c>''||c<'';c=getchar())if(c=='-')f=-;
     while(c>=''&&c<='')s=s*+(c^''),c=getchar();
     return s*f;
 }
 template<class Tp>Iv print(Tp x){
     if(x<)putchar('-'),x=-x;
     if(x>)print(x/);
     putchar(x%^'');
 }
 int t_max[N<<],t_min[N<<];
 int M;
 Iv Build(int n){
     for(M=;M<=n+;M<<=);
 }
 Iv updata(int n,int w){
     int tmp=n;
     for(t_max[n+=M]+=w,n>>=;n;n>>=)
         t_max[n]=Max(t_max[n<<],t_max[n<<|]);
     n=tmp;
     for(t_min[n+=M]+=w,n>>=;n;n>>=)
         t_min[n]=Min(t_min[n<<],t_min[n<<|]);
 }
 Ii query_max(int s,int t){
     int ans=-INF;
     for(s+=M-,t+=M+;s^t^;s>>=,t>>=){
         if(~s&)Cmax(ans,t_max[s^]);
         if(t&)Cmax(ans,t_max[t^]);
     }
     return ans;
 }
 Ii query_min(int s,int t){
     int ans=INF;
     for(s+=M-,t+=M+;s^t^;s>>=,t>>=){
         if(~s&)Cmin(ans,t_min[s^]);
         if(t&)Cmin(ans,t_min[t^]);
     }
     return ans;
 }
 int main(){
     int n=read(),K=read();
     Build(n);
     R(i,,n)
         updata(i,read());
     int l=,r=K;
     while(){
         printf("%d ",query_min(l,r));
         ++l,++r;
         if(r>n)break;
     }
     putchar('\n');
     l=,r=K;
     while(){
         printf("%d ",query_max(l,r));
         ++l,++r;
         if(r>n)break;
     }
     return ;
 }
SegmentTree_ZKW_100.cpp
PS: POJ TLE
Luogu P1886 滑动窗口的更多相关文章
- [Luogu P1886]滑动窗口--单调队列入门
		题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ... 
- luogu P1886 滑动窗口(单调队列
		题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ... 
- POJ 2823 Sliding Window & Luogu P1886 滑动窗口
		Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 66613 Accepted: 18914 ... 
- P1886 滑动窗口(单调队列)
		P1886 滑动窗口 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: ... 
- P1886 滑动窗口&&P1440 求m区间内的最小值
		声明:下面这两个题就不要暴力了,学一学单调队列吧 推荐博文:https://www.cnblogs.com/tham/p/8038828.html 单调队列入门题 P1440 求m区间内的最小值 题目 ... 
- 单调队列优化&&P1886 滑动窗口题解
		单调队列: 顾名思义,就是队列中元素是单调的(单增或者单减). 在某些问题中能够优化复杂度. 在dp问题中,有一个专题动态规划的单调队列优化,以后会更新(现在还是太菜了不会). 在你看到类似于滑动定长 ... 
- 洛谷 P1886 滑动窗口(单调队列)
		题目链接 https://www.luogu.org/problemnew/show/P1886 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始 ... 
- P1886 滑动窗口 /【模板】单调队列 方法记录
		原题链接 滑动窗口 /[模板]单调队列 题目描述 有一个长为 \(n\) 的序列 \(a\),以及一个大小为 \(k\) 的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最 ... 
- 洛谷P1886 滑动窗口(POJ.2823 Sliding Window)(区间最值)
		To 洛谷.1886 滑动窗口 To POJ.2823 Sliding Window 题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每 ... 
随机推荐
- 洛谷 P2899 [USACO08JAN]手机网络Cell Phone Network
			题目描述 Farmer John has decided to give each of his cows a cell phone in hopes to encourage their socia ... 
- json操作工具-LitJson
			LitJSON是json生成与读取的操作工具,使用很方便并且网上还能找到源码.下面是使用LitJSON的例子: 一.生成json:实例化一个JsonData,然后按照List数组的方式向里面填. Js ... 
- Vmware下CentOs7 桥接模式下配置固定IP
			1.安装完CentOS7后 修改虚拟机网络适配器配置:改成桥接模式 2.设置Vmware的 编辑->虚拟网络编辑器 3.重启CentOs7 , 查看网络 # ip addr interface是 ... 
- 51Nod 1554 欧姆诺姆和项链 (KMP)
			题意:中文题. 析:首先要使用KMP的失配函数 f ,对于长度为 i 的串,如果存在循环节那么 i % (i-f[i]) == 0,循环节的长度就是 i - f[i] ,当然次数就是 i / (i- ... 
- Materialize——扁平化卡片式网页模板
			Materialize 官网:http://www.materialscss.com/ 下载 http://pan.baidu.com/s/1kUUX2Vt CSS 颜色 背景色 <div cl ... 
- poj2480——Longge's problem(欧拉函数)
			Longge's problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9190 Accepted: 3073 ... 
- MAX6675操作源码--K型热电偶模数转换器
			#define P_TENB PF4_OUT #define P_TSLK PA3_OUT #define P_TDAT PB2_IN //****************************** ... 
- Windowsform datagridview选中向父窗口传值
			Datagridview mouseclick事件 private void dataGridView1_MouseClick(object sender, MouseEventArgs e) { i ... 
- Slq怎么样获取首条记录和最后一条记录
			sql如何查询表的第一条记录和最后一条记录 方法一:使用top select TOP 1 * from apple;TOP 1 表示表apple中的第一条数据 select TOP 1 * from ... 
- C#判断一个字符串是否是数字或者含有某个数字
			第一种就是 最常见的 用Try..Catch.. 再try中强转你要确认的string 类型 成功就是int catch 就不是 string a = "avdfd"; try ... 
