转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
1 //##################### 2 //Author:fraud 3 //Blog: http://www.cnblogs.com/fraud/ 4 //##################### 5 #include <iostream> 6 #include <sstream> 7 #include <ios> 8 #include <iomanip> 9 #include <functional> 10 #include <algorithm> 11 #include <vector> 12 #include <string> 13 #include <list> 14 #include <queue> 15 #include <deque> 16 #include <stack> 17 #include <set> 18 #include <map> 19 #include <cstdio> 20 #include <cstdlib> 21 #include <cmath> 22 #include <cstring> 23 #include <climits> 24 #include <cctype> 25 using namespace std; 26 #define XINF INT_MAX 27 #define INF 0x3FFFFFFF 28 #define MP(X,Y) make_pair(X,Y) 29 #define PB(X) push_back(X) 30 #define REP(X,N) for(int X=0;X<N;X++) 31 #define REP2(X,L,R) for(int X=L;X<=R;X++) 32 #define DEP(X,R,L) for(int X=R;X>=L;X--) 33 #define CLR(A,X) memset(A,X,sizeof(A)) 34 #define IT iterator 35 typedef long long ll; 36 typedef pair<int,int> PII; 37 typedef vector<PII> VII; 38 typedef vector<int> VI; 39 int Scan() 40 { 41 int res, ch=0; 42 while(!(ch>=‘0‘&&ch<=‘9‘)) ch=getchar(); 43 res=ch-‘0‘; 44 while((ch=getchar())>=‘0‘&&ch<=‘9‘) 45 res=res*10+ch-‘0‘; 46 return res; 47 } 48 void Out(int a) 49 { 50 if(a>9) 51 Out(a/10); 52 putchar(a%10+‘0‘); 53 } 54 int h[100100]; 55 int q[100100]; 56 int p[100100]; 57 int px[100100]; 58 int ans[100100]; 59 bool cmp(int x,int y){ 60 if(q[x]==q[y])return x<y; 61 return q[x]<q[y]; 62 } 63 bool cmp1(int x,int y){ 64 return h[x]<h[y]; 65 } 66 int main() 67 { 68 //ios::sync_with_stdio(false); 69 int n,m; 70 while(scanf("%d%d",&n,&m)!=EOF){ 71 h[n+1]=-1;h[0]=-1; 72 for(int i=1;i<=n;i++)h[i]=Scan(); 73 for(int i=1;i<=n;i++)px[i]=i; 74 sort(px+1,px+n+1,cmp1); 75 for(int i=1;i<=m;i++)q[i]=Scan(); 76 for(int i=1;i<=m;i++)p[i]=i; 77 sort(p+1,p+m+1,cmp); 78 int j=1; 79 ans[0]=1; 80 p[0]=0; 81 for(int i=1;i<=m;i++){ 82 ans[p[i]]=ans[p[i-1]]; 83 while(j<=n&&h[px[j]]<=q[p[i]]){ 84 h[px[j]]=-1; 85 if(h[px[j]-1]==-1&&h[px[j]+1]==-1)ans[p[i]]--; 86 else if(h[px[j]-1]>0&&h[px[j]+1]>0)ans[p[i]]++; 87 j++; 88 } 89 } 90 for(int i=1;i<=m;i++){ 91 printf("%d\n",ans[i]); 92 } 93 } 94 return 0; 95 }
BestCoder Round #36 (hdu5200)Strange Class(离线)
原文:http://www.cnblogs.com/fraud/p/4397209.html