标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6141 Accepted Submission(s): 2041
1 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<string.h> 5 #include<stdlib.h> 6 #include<queue> 7 #include<stack> 8 using namespace std; 9 typedef long long LL; 10 int ask[100005]; 11 int cnt[100005]; 12 struct node1 13 { 14 int x; 15 int id; 16 bool operator<(const node1 &cx)const 17 { 18 if(cx.x == x) 19 return cx.id<id; 20 else return cx.x>x; 21 } 22 }; 23 struct node2 24 { 25 int x; 26 int id; 27 bool operator<(const node2 &cx)const 28 { 29 if(cx.x == x) 30 return cx.id<id; 31 else return cx.x<x; 32 } 33 }; 34 priority_queue<node1>que1; 35 priority_queue<node2>que2; 36 int main(void) 37 { 38 int n,m,k; 39 while(scanf("%d %d %d",&n,&m,&k)!=EOF) 40 { 41 while(!que1.empty())que1.pop(); 42 while(!que2.empty())que2.pop(); 43 int i,j; 44 for(i = 0; i < n; i++) 45 { 46 scanf("%d",&ask[i]); 47 } 48 int l = 0; 49 int r = 0; 50 int cc = 0; 51 int ma = ask[0]; 52 int mi = ask[0]; 53 int x = abs(ma-mi); 54 if(x <= k&&x >= m)cc = 1; 55 node1 ak; 56 node2 ap; 57 ak.x =ask[0]; 58 ak.id = 0; 59 ap.x = ask[0]; 60 ap.id = 0; 61 que1.push(ak); 62 que2.push(ap); 63 while(l<=r&&r<n) 64 { 65 while(x <= k &&r < n-1) 66 { 67 r++; 68 int c = abs(ask[r]-ma); 69 c = max(abs(ask[r]-mi),c); 70 if(c > k) 71 { //printf("%d %d\n",l,r); 72 r--; 73 break; 74 } 75 node1 ac; 76 ac.x = ask[r]; 77 ac.id = r; 78 node2 bc; 79 bc.x= ask[r]; 80 bc.id = r; 81 que1.push(ac); 82 que2.push(bc); 83 if(ask[r] > ma) 84 { 85 ma = ask[r]; 86 } 87 else if(ask[r] < mi) 88 { 89 mi = ask[r]; 90 } 91 x = abs(ma-mi);//printf("%d\n",x); 92 } 93 if(x >= m) 94 { 95 cc = max(cc,r-l+1); 96 } 97 if(ask[l] == ma) 98 { 99 while(!que1.empty()) 100 { 101 node1 acc = que1.top(); 102 if(acc.id <= l) 103 { 104 que1.pop(); 105 } 106 else 107 { 108 ma = acc.x; 109 break; 110 } 111 } 112 } 113 if(ask[l]==mi) 114 { 115 while(!que2.empty()) 116 { 117 node2 acc = que2.top(); 118 if(acc.id <= l) 119 { 120 que2.pop(); 121 } 122 else 123 { 124 mi = acc.x; 125 break; 126 } 127 } 128 } 129 l++; 130 if(l == r+1) 131 { //printf("%d\n",r); 132 r++; 133 node1 akk; 134 node2 app; 135 akk.x =ask[r]; 136 akk.id = r; 137 app.x = ask[r]; 138 app.id = r; 139 que1.push(akk); 140 que2.push(app); 141 mi = ask[r]; 142 ma = ask[r]; 143 } 144 } 145 printf("%d\n",cc); 146 } 147 return 0; 148 }
标签:
原文地址:http://www.cnblogs.com/zzuli2sjy/p/5935262.html