답안 #6716

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
6716 2014-07-04T17:58:13 Z gs13068 역사적 조사 (JOI14_historical) C++
100 / 100
1104 ms 402748 KB
#include<cstdio>
#include<memory.h>
#include<algorithm>

#define BUCKET 250

int a[100000];
int b[100000];
int c[100000];
int d[1000][100000];
long long x[1000][1000];

char ss[2097152];

inline int getnum()
{
	int t,r=0;
	do{t=getchar();}while(t<40);
	do{r=r*10+t-48;t=getchar();}while(t>40);
	return r;
}

int main()
{
	char *p;
	long long r;
	int s,e,t;
	int i,j,k,n,m;
	scanf("%d %d\n",&n,&m);
	fgets(ss,2097151,stdin);
	p=ss;
	for(i=0;i<n;i++)
	{
        while(*p<40)p++;
        while(*p>40)
		{
			a[i]=a[i]*10+*p-48;
			p++;
		}
		b[i]=a[i];
	}
	std::sort(b,b+n);
	for(i=0;i<n;i++)a[i]=std::lower_bound(b,b+n,a[i])-b;
    for(i=0;i<n/BUCKET;i++)
	{
		if(i>0)memcpy(d[i],d[i-1],n<<2);
		for(j=0;j<BUCKET;j++)d[i][a[i*BUCKET+j]]++;
	}
    for(i=0;i<n/BUCKET;i++)
	{
		memset(c,0,n<<2);
		for(j=i;j<n/BUCKET;j++)
		{
			if(j>i)x[i][j]=x[i][j-1];
			for(k=0;k<BUCKET;k++)
			{
				t=j*BUCKET+k;
				c[a[t]]++;
                if(1LL*b[a[t]]*c[a[t]]>x[i][j])x[i][j]=1LL*b[a[t]]*c[a[t]];
			}
		}
	}
	memset(c,0,n<<2);
	for(i=0;i<m;i++)
	{
		s=getnum()-1;e=getnum();
		if((s+BUCKET-1)/BUCKET<e/BUCKET)
		{
			r=x[(s+BUCKET-1)/BUCKET][e/BUCKET-1];
			for(j=s;j<(s+BUCKET-1)/BUCKET*BUCKET;j++)c[a[j]]++;
			for(j=e/BUCKET*BUCKET;j<e;j++)c[a[j]]++;
			for(j=s;j<(s+BUCKET-1)/BUCKET*BUCKET;j++)if(1LL*b[a[j]]*(c[a[j]]+d[e/BUCKET-1][a[j]]-((s+BUCKET-1)/BUCKET>0?d[(s+BUCKET-1)/BUCKET-1][a[j]]:0))>r)r=1LL*b[a[j]]*(c[a[j]]+d[e/BUCKET-1][a[j]]-((s+BUCKET-1)/BUCKET>0?d[(s+BUCKET-1)/BUCKET-1][a[j]]:0));
			for(j=e/BUCKET*BUCKET;j<e;j++)if(1LL*b[a[j]]*(c[a[j]]+d[e/BUCKET-1][a[j]]-((s+BUCKET-1)/BUCKET>0?d[(s+BUCKET-1)/BUCKET-1][a[j]]:0))>r)r=1LL*b[a[j]]*(c[a[j]]+d[e/BUCKET-1][a[j]]-((s+BUCKET-1)/BUCKET>0?d[(s+BUCKET-1)/BUCKET-1][a[j]]:0));
			for(j=s;j<(s+BUCKET-1)/BUCKET*BUCKET;j++)c[a[j]]=0;
			for(j=e/BUCKET*BUCKET;j<e;j++)c[a[j]]=0;
		}
		else
		{
			r=0;
			for(j=s;j<e;j++)c[a[j]]++;
			for(j=s;j<e;j++)if(1LL*b[a[j]]*c[a[j]]>r)r=1LL*b[a[j]]*c[a[j]];
			for(j=s;j<e;j++)c[a[j]]=0;
		}
		printf("%lld\n",r);
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 402748 KB Output is correct
2 Correct 0 ms 402748 KB Output is correct
3 Correct 0 ms 402748 KB Output is correct
4 Correct 0 ms 402748 KB Output is correct
5 Correct 0 ms 402748 KB Output is correct
6 Correct 0 ms 402748 KB Output is correct
7 Correct 0 ms 402748 KB Output is correct
8 Correct 0 ms 402748 KB Output is correct
9 Correct 0 ms 402748 KB Output is correct
10 Correct 0 ms 402748 KB Output is correct
11 Correct 0 ms 402748 KB Output is correct
12 Correct 0 ms 402748 KB Output is correct
13 Correct 0 ms 402748 KB Output is correct
14 Correct 0 ms 402748 KB Output is correct
15 Correct 0 ms 402748 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 402748 KB Output is correct
2 Correct 0 ms 402748 KB Output is correct
3 Correct 0 ms 402748 KB Output is correct
4 Correct 0 ms 402748 KB Output is correct
5 Correct 4 ms 402748 KB Output is correct
6 Correct 12 ms 402748 KB Output is correct
7 Correct 12 ms 402748 KB Output is correct
8 Correct 8 ms 402748 KB Output is correct
9 Correct 8 ms 402748 KB Output is correct
10 Correct 12 ms 402748 KB Output is correct
11 Correct 12 ms 402748 KB Output is correct
12 Correct 12 ms 402748 KB Output is correct
13 Correct 12 ms 402748 KB Output is correct
14 Correct 12 ms 402748 KB Output is correct
15 Correct 12 ms 402748 KB Output is correct
16 Correct 8 ms 402748 KB Output is correct
17 Correct 8 ms 402748 KB Output is correct
18 Correct 12 ms 402748 KB Output is correct
19 Correct 8 ms 402748 KB Output is correct
20 Correct 8 ms 402748 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 402748 KB Output is correct
2 Correct 0 ms 402748 KB Output is correct
3 Correct 0 ms 402748 KB Output is correct
4 Correct 0 ms 402748 KB Output is correct
5 Correct 0 ms 402748 KB Output is correct
6 Correct 0 ms 402748 KB Output is correct
7 Correct 0 ms 402748 KB Output is correct
8 Correct 4 ms 402748 KB Output is correct
9 Correct 16 ms 402748 KB Output is correct
10 Correct 60 ms 402748 KB Output is correct
11 Correct 204 ms 402748 KB Output is correct
12 Correct 112 ms 402748 KB Output is correct
13 Correct 276 ms 402748 KB Output is correct
14 Correct 268 ms 402748 KB Output is correct
15 Correct 216 ms 402748 KB Output is correct
16 Correct 336 ms 402748 KB Output is correct
17 Correct 176 ms 402748 KB Output is correct
18 Correct 280 ms 402748 KB Output is correct
19 Correct 252 ms 402748 KB Output is correct
20 Correct 120 ms 402748 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 402748 KB Output is correct
2 Correct 68 ms 402748 KB Output is correct
3 Correct 184 ms 402748 KB Output is correct
4 Correct 276 ms 402748 KB Output is correct
5 Correct 384 ms 402748 KB Output is correct
6 Correct 488 ms 402748 KB Output is correct
7 Correct 424 ms 402748 KB Output is correct
8 Correct 348 ms 402748 KB Output is correct
9 Correct 380 ms 402748 KB Output is correct
10 Correct 340 ms 402748 KB Output is correct
11 Correct 452 ms 402748 KB Output is correct
12 Correct 696 ms 402748 KB Output is correct
13 Correct 1020 ms 402748 KB Output is correct
14 Correct 1076 ms 402748 KB Output is correct
15 Correct 1104 ms 402748 KB Output is correct
16 Correct 1064 ms 402748 KB Output is correct
17 Correct 1080 ms 402748 KB Output is correct
18 Correct 1052 ms 402748 KB Output is correct
19 Correct 1064 ms 402748 KB Output is correct
20 Correct 1080 ms 402748 KB Output is correct
21 Correct 1080 ms 402748 KB Output is correct
22 Correct 1088 ms 402748 KB Output is correct
23 Correct 1068 ms 402748 KB Output is correct
24 Correct 1076 ms 402748 KB Output is correct
25 Correct 328 ms 402748 KB Output is correct