| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
这个题本来就没打算让这么样的算法过的In Reply To:这题时限卡太死了吧,离散化+radix sort,TLE, 不管怎么改参数就是不过... Posted by:qiqilrq at 2007-05-11 12:02:08 > #include <iostream>
> #include <list>
> using namespace std;
>
> const int MIN = 50000;
> const int MID = 20002;
> int A[MID];
> int C[2 * MID];
> int R[MIN];
>
> int main()
> {
> int i, j, p, N, M;
> int st, ed, K;
> scanf("%d%d", &N, &M);
> for(i=1; i<=N; i++) {
> scanf("%d", A+i);
> }
> for(i=1; i<=M; i++) {
> list <int> L[2*MID];
> int lt=MID, rt=MID; //left , right
> int k;
> memset(C, 0, 2*MID*sizeof(int));
>
> scanf("%d%d%d",&st, &ed, &K);
> for(j=st; j<=ed; j++)
> {
> p=A[j]/MIN + MID;
> if(A[j]<0) p--;
> C[p]++;
> if(p<lt) lt=p;
> if(p>rt) rt=p;
> L[p].push_back(A[j] - (p-MID)*MIN);
> }
> for(j=lt;K-C[j] > 0 && j<=rt; j++)
> {
> K-=C[j];
> }
> //radixSort(j);
> memset(R, 0, MIN*sizeof(int));
> list <int> ::iterator lit;
> // printf("list element: ");
> for(lit=L[j].begin(); lit!=L[j].end(); ++lit)
> {
> R[*lit]++;
> // printf("%d ", *lit);
> }
> // puts("");
> for(k=0; k<MIN; k++)
> {
> // printf("R[%d]: %d \n",k, R[k]);
> if(K-R[k] > 0)
> K-=R[k];
> else break;
> }
> printf("%d\n", k + MIN*(j-MID));
> }
>
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator