标签:des style blog http io ar os sp for
Time Limit: 12000MS | Memory Limit: 65536K | |
Total Submissions: 40443 | Accepted: 11950 | |
Case Time Limit: 5000MS |
Description
Window position | Minimum value | Maximum value |
---|---|---|
[1 3 -1] -3 5 3 6 7 | -1 | 3 |
1 [3 -1 -3] 5 3 6 7 | -3 | 3 |
1 3 [-1 -3 5] 3 6 7 | -3 | 5 |
1 3 -1 [-3 5 3] 6 7 | -3 | 5 |
1 3 -1 -3 [5 3 6] 7 | 3 | 6 |
1 3 -1 -3 5 [3 6 7] | 3 | 7 |
Your task is to determine the maximum and minimum values in the sliding window at each position.
Input
Output
Sample Input
8 3 1 3 -1 -3 5 3 6 7
Sample Output
-1 -3 -3 -3 3 3 3 3 5 5 6 7
Source
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<queue> #include<cstdlib> #include<vector> #include<set> #include<queue> using namespace std; int a[1000000]; int aa[1000000]; int bb[1000000]; int n,s; struct cmp1 { bool operator()(const int a1,const int a2) { return a[a1]>a[a2]; } }; struct cmp2 { bool operator()(const int a1,const int a2) { return a[a1]<a[a2]; } }; priority_queue<int,vector<int>,cmp1>q1; priority_queue<int,vector<int>,cmp2>q2; int main() { scanf("%d%d",&n,&s); int i,cnt1=0,cnt2=0; for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<s;i++) { q1.push(i); q2.push(i); } aa[cnt1++]=a[q1.top()]; bb[cnt2++]=a[q2.top()]; for(i=s;i<n;i++) { q1.push(i); q2.push(i); while(i-q1.top()>=s) q1.pop(); aa[cnt1++]=a[q1.top()]; while(i-q2.top()>=s) q2.pop(); bb[cnt2++]=a[q2.top()]; } printf("%d",aa[0]); for(i=1;i<n-s+1;i++) printf(" %d",aa[i]); printf("\n"); printf("%d",bb[0]); for(i=1;i<n-s+1;i++) printf(" %d",bb[i]); printf("\n"); return 0; }
标签:des style blog http io ar os sp for
原文地址:http://www.cnblogs.com/a972290869/p/4099525.html