| ||||||||||
| 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 | |||||||||
这个题线段树能过!47ms,之前打错了一个参数搞死循环了TLE。。。#include <iostream>
#include <stdio.h>
using namespace std;
int N, M;
int a1, a2, a3, s1, s2, s3, e1, e2, e3;
int xds[200002];
int mum[50005];
int S(long long int i){
long long int ans = i*i*s1 + i*s2 + s3;
return (int)(ans%(N/2));
}
int E(long long int i, int s){
long long int ans = i*i*e1 + i*e2 + e3;
return s + (int)(ans%(N/2));
}
int A(long long int i){
long long int ans = i*i*a1 + i*a2 + a3;
return (int)(ans%9973);
}
int mn(int a, int b){
return (a<b) ? a : b;
}
void jxds(int start, int end, int bh){
if(start == end){
xds[bh] = A(start);
return;
}
int mid = (start+end)/2;
jxds(start, mid, 2*bh+1);
jxds(mid+1, end, 2*bh+2);
xds[bh] = mn(xds[2*bh+1], xds[2*bh+2]);
}
int cx(int cxStart, int cxEnd, int xzStart, int xzEnd, int bh){
if(cxStart == xzStart && cxEnd == xzEnd){
return xds[bh];
}
int xzMid = (xzStart+xzEnd)/2;
if(cxEnd <= xzMid){
return cx(cxStart, cxEnd, xzStart, xzMid, 2*bh+1);
}
else if(cxStart > xzMid){
return cx(cxStart, cxEnd, xzMid+1, xzEnd, 2*bh+2);
}
else{
int hx1 = cx(cxStart, xzMid, xzStart, xzMid, 2*bh+1);
int hx2 = cx(xzMid+1, cxEnd, xzMid+1, xzEnd, 2*bh+2);
return mn(hx1, hx2);
}
}
int cx(int s, int e){
return cx(s, e, 0, N-1, 0);
}
int main() {
int t;
scanf("%d", &t);
for(int ii = 0; ii < t; ii++){
scanf("%d%d%d%d%d%d%d%d%d%d%d", &N , &a1, &a2, &a3, &M ,&s1, &s2, &s3, &e1, &e2, &e3);
jxds(0, N-1, 0);
int mx = 0;
for(int i = 0; i < M; i++){
int si = S(i);
int ei = E(i, si);
mum[i] = cx(si, ei);
//cout << mum[i] << endl;
if(mum[i] > mx) mx = mum[i];
}
for(int i = 0; i < M; i++){
if(mum[i] == mx){
printf("%d\n", i);
break;
}
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator