#include <bits/stdc++.h>
static struct FASTIO {
char READ_CHARACTER; bool REMAINING_CHARACTER = false;
inline void ignore(); inline void flush();
template <typename T> inline bool READ_INT(T &x); template <typename T> inline bool READ_STRING(T &x);
/* Fast I/O Code Optimizer */
template<size_t N> inline bool READ_CHAR_ARRAY(char (&x)[N]); template<size_t N> inline bool READ_VAR(char (&x)[N]);
/* A tool to optimize execution time of C++ codes by replacing methods of reading and writing variables */
template <typename T> inline bool READ_CHAR(T &x); inline bool READ_CHAR_ARRAY(char*& x); inline bool READ_GETLINE(std::string &x);
/* Use it on fastio.pythonanywhere.com */
template <typename T> inline bool READ_FLOAT(T &x); template <typename T> inline bool READ_DOUBLE(T &x);
/* Github Project: github.com/bfs07/Fast-IO-Code-Optimizer */
template<std::size_t N> inline bool READ_BITSET(std::bitset<N> &bit); template<std::size_t N> inline bool READ_VAR(std::bitset<N> &bit);
inline bool READ_VAR(bool &x); inline bool READ_VAR(short int &x); inline bool READ_VAR(int &x);
inline bool READ_VAR(long int &x); inline bool READ_VAR(long long int &x); inline bool READ_VAR(unsigned short int &x);
inline bool READ_VAR(unsigned int &x); inline bool READ_VAR(unsigned long &x); inline bool READ_VAR(unsigned long long &x);
inline bool READ_VAR(std::string &x); inline bool READ_VAR(char &x); inline bool READ_VAR(char*& x); inline bool READ_VAR(float &x);
inline bool READ_VAR(double &x); inline bool READ_VAR(long double &x); template <typename T> inline void WRITE_INT(T x);
inline void WRITE_STRING(std::string &x); inline void WRITE_CHAR(char x); inline void WRITE_CHAR_ARRAY(const char *x);
inline void WRITE_FLOAT(float x); template <typename T> inline void WRITE_DOUBLE(T x); inline void WRITE_VAR(bool x);
inline void WRITE_VAR(short int x); inline void WRITE_VAR(int x); inline void WRITE_VAR(long int x); inline void WRITE_VAR(long long int x);
inline void WRITE_VAR(unsigned short int x); inline void WRITE_VAR(unsigned int x); inline void WRITE_VAR(unsigned long x);
inline void WRITE_VAR(unsigned long long x); inline void WRITE_VAR(char x); inline void WRITE_VAR(const char *x);
inline void WRITE_VAR(std::string &x); inline void WRITE_VAR(float x); inline void WRITE_VAR(double x); inline void WRITE_VAR(long double x);
template<std::size_t N> inline void WRITE_VAR(std::bitset<N> &bit); template<std::size_t N> inline void WRITE_BITSET(std::bitset<N> &bit);
} __FIO__;
#include <bits/stdc++.h>
#define lp(i,a,b) for(int i = a ; i < b ; i++ )
#define ff first
#define ss second
#define sz size()
#define ll long long
#define mk make_pair
#define pii pair<int,int>
#define pb push_back
#define debug
#define sq 317
#pragma GCC optmization("O3")
const int MAXN=1e5+10 ;
using namespace std ;
int n , q , qtdB ;
int a[MAXN] , b[MAXN] , ini[MAXN] , fim[MAXN] ;
ll freqTemp[MAXN] , compr[MAXN] ;
ll resp[sq][sq] ,freq[sq][MAXN] ;
map<int,int> mapa ;
int main()
{
scanf("%d%d", &n , &q) ;
lp(i,0,n) scanf("%d", &a[i]) ;
for(int i = 0 , j = 0 , k = 0 ; i < n ; i++ , j++ )
{
if( j == sq )
{
fim[k] = i-1 ;
ini[++k] = i ;
j = 0 ;
}
b[i] = k ;
if( i == n-1 ) fim[k] = n-1 , qtdB = k ;
}
lp(i,0,n) debug("%d " , b[i]) ;
debug("\n") ;
lp(i,0,qtdB+1) debug("%d %d\n" , ini[i] , fim[i]) ;
debug("\n") ;
lp(i,0,n) mapa[ a[i] ] = 0 ;
int Key = 1 ;
for(auto &p : mapa ) p.ss = Key ++ ;
lp(i,0,n) a[i] = mapa[a[i]] ;
for(auto &p : mapa ) compr[p.ss] = 1LL * p.ff ;
for(int i = 0 ; i <= qtdB ; i++ )
for(int j = ini[i] ; j < n ; j++ )
freq[i][ a[j] ] += compr[a[j]] ;
for(int i = 0 ; i <= qtdB ; i++ )
for(int j = i ; j <= qtdB ; j++ )
{
if( j-1 >= 0 )
resp[i][j] = resp[i][j-1] ;
for(int k = ini[j] ; k <= fim[j] ; k++ )
resp[i][j] = max( resp[i][j] , freq[i][ a[k] ] - freq[j+1][ a[k] ] ) ;
}
while(q--)
{
int l , r ;
scanf("%d%d", &l, &r ) ;
l -- , r -- ;
ll ans = 0LL ;
if( b[l] == b[r] || b[l] == b[r]-1 )
{
for(int i = l ; i <= r ; i++ )
freqTemp[a[i]] += compr[a[i]] ;
ans = *max_element(freqTemp, freqTemp + Key) ;
for(int i = l ; i <= r ; i++ )
freqTemp[a[i]] = 0LL ;
}
else
{
ans = resp[ b[l]+1 ][ b[r]-1 ] ;
vector<int> aux ;
for(int i = l ; i <= fim[b[l]] ; i++ )
{
aux.pb( a[i] ) ;
freqTemp[a[i]] += compr[a[i]] ;
if( freqTemp[a[i]] + freq[b[l]+1][a[i]] - freq[b[r]][a[i]] > ans )
ans = freqTemp[a[i]] + freq[b[l]+1][a[i]] - freq[b[r]][a[i]] ;
}
for(int i = r ; i >= ini[b[r]] ; i-- )
{
aux.pb( a[i] ) ;
freqTemp[a[i]] += compr[a[i]] ;
if( freqTemp[a[i]] + freq[b[l]+1][a[i]] - freq[b[r]][a[i]] > ans )
ans = freqTemp[a[i]] + freq[b[l]+1][a[i]] - freq[b[r]][a[i]] ;
}
for(int i : aux ) freqTemp[i] = 0LL ;
}
printf("%lld\n" , ans ) ;
}
}
#undef lp
#undef lp
#undef ff
#undef ss
#undef sz
#undef ll
#undef mk
#undef pii
#undef pb
#undef debug
#undef sq
inline void FASTIO::ignore() {
if(REMAINING_CHARACTER == true) REMAINING_CHARACTER = false; else READ_CHARACTER = getchar();
}
inline void FASTIO::flush() {
fflush(stdout);
}
// cin modifications
template <typename T>
inline bool FASTIO::READ_INT(T &x) {
x = 0; T sig = 1;
if(!REMAINING_CHARACTER) READ_CHARACTER = getchar(), REMAINING_CHARACTER = true; else REMAINING_CHARACTER = false;
while (!isdigit(READ_CHARACTER) && READ_CHARACTER != EOF) sig = (READ_CHARACTER == '-' ? -sig : sig), READ_CHARACTER = getchar();
if(READ_CHARACTER == EOF) return REMAINING_CHARACTER = false, false;
while (isdigit(READ_CHARACTER)) x = x * 10 + READ_CHARACTER - '0', READ_CHARACTER = getchar();
x *= sig; REMAINING_CHARACTER = true;
return true;
}
template <typename T>
inline bool FASTIO::READ_STRING(T &x) {
x = "";
if(!REMAINING_CHARACTER) READ_CHARACTER = getchar(), REMAINING_CHARACTER = true; else REMAINING_CHARACTER = false;
while ((READ_CHARACTER == '\n' || READ_CHARACTER == '\t' || READ_CHARACTER == ' ')) READ_CHARACTER = getchar();
if(READ_CHARACTER == EOF) return REMAINING_CHARACTER = false, false;
while ((READ_CHARACTER != '\n' && READ_CHARACTER != '\t' && READ_CHARACTER != ' ' && READ_CHARACTER != EOF)) x += READ_CHARACTER, READ_CHARACTER = getchar();
REMAINING_CHARACTER = true;
return true;
}
inline bool FASTIO::READ_GETLINE(std::string &x) {
x = "";
if(!REMAINING_CHARACTER) READ_CHARACTER = getchar(), REMAINING_CHARACTER = true; else REMAINING_CHARACTER = false;
if(READ_CHARACTER == EOF) return REMAINING_CHARACTER = false, false;
while ((READ_CHARACTER != '\n' && READ_CHARACTER != EOF)) x += READ_CHARACTER, READ_CHARACTER = getchar();
REMAINING_CHARACTER = false;
return true;
}
template <typename T>
inline bool FASTIO::READ_CHAR(T &x) {
if(!REMAINING_CHARACTER) READ_CHARACTER = getchar(), REMAINING_CHARACTER = true; else REMAINING_CHARACTER = false;
if(READ_CHARACTER == EOF) return REMAINING_CHARACTER = false, false;
while ((READ_CHARACTER == '\n' || READ_CHARACTER == '\t' || READ_CHARACTER == ' ')) READ_CHARACTER = getchar();
x = READ_CHARACTER; REMAINING_CHARACTER = false;
return true;
}
template<size_t N>
inline bool FASTIO::READ_CHAR_ARRAY(char (&x)[N]) {
if(!REMAINING_CHARACTER) READ_CHARACTER = getchar(), REMAINING_CHARACTER = true; else REMAINING_CHARACTER = false;
while ((READ_CHARACTER == '\n' || READ_CHARACTER == '\t' || READ_CHARACTER == ' ')) READ_CHARACTER = getchar();
if(READ_CHARACTER == EOF) return REMAINING_CHARACTER = false, false;
char *ptr = &x[0];
while ((READ_CHARACTER != '\n' && READ_CHARACTER != '\t' && READ_CHARACTER != ' ' && READ_CHARACTER != EOF)) *ptr++ = READ_CHARACTER, READ_CHARACTER = getchar();
*ptr = '\0', REMAINING_CHARACTER = true;
return true;
}
inline bool FASTIO::READ_CHAR_ARRAY(char*& x) {
std::string y;
if(READ_STRING(y) == false)
return false;
x = new char[(int)y.size() + 1];
strcpy(x, y.c_str());
return true;
}
template <typename T>
inline bool FASTIO::READ_FLOAT(T &x) {
return (scanf("%f", &x) != EOF);
}
template <typename T>
inline bool FASTIO::READ_DOUBLE(T &x) {
double y;
if(scanf("%lf", &y) == EOF) return false;
x = y;
return true;
}
template<std::size_t N>
inline bool FASTIO::READ_BITSET(std::bitset<N> &x) {
if(!REMAINING_CHARACTER) READ_CHARACTER = getchar(), REMAINING_CHARACTER = true; else REMAINING_CHARACTER = false;
while ((READ_CHARACTER == '\n' || READ_CHARACTER == '\t' || READ_CHARACTER == ' ')) READ_CHARACTER = getchar();
if(READ_CHARACTER == EOF) return REMAINING_CHARACTER = false, false;
int i = 0; REMAINING_CHARACTER = true;
while (READ_CHARACTER == '0' || READ_CHARACTER == '1') x[i++] = READ_CHARACTER - '0', READ_CHARACTER = getchar();
return true;
}
inline bool FASTIO::READ_VAR(short int &x) {
return READ_INT(x);
}
inline bool FASTIO::READ_VAR(int &x) {
return READ_INT(x);
}
inline bool FASTIO::READ_VAR(long int &x) {
return READ_INT(x);
}
inline bool FASTIO::READ_VAR(long long int &x) {
return READ_INT(x);
}
inline bool FASTIO::READ_VAR(unsigned short int &x) {
return READ_INT(x);
}
inline bool FASTIO::READ_VAR(unsigned int &x) {
return READ_INT(x);
}
inline bool FASTIO::READ_VAR(unsigned long &x) {
return READ_INT(x);
}
inline bool FASTIO::READ_VAR(unsigned long long &x) {
return READ_INT(x);
}
inline bool FASTIO::READ_VAR(std::string &x) {
return READ_STRING(x);
}
inline bool FASTIO::READ_VAR(char &x) {
return READ_CHAR(x);
}
template<size_t N>
inline bool FASTIO::READ_VAR(char (&x)[N]) {
return READ_CHAR_ARRAY(x);
}
inline bool FASTIO::READ_VAR(char*& x) {
return READ_CHAR_ARRAY(x);
}
inline bool FASTIO::READ_VAR(float &x) {
return READ_FLOAT(x);
}
inline bool FASTIO::READ_VAR(double &x) {
return READ_DOUBLE(x);
}
inline bool FASTIO::READ_VAR(long double &x) {
return READ_DOUBLE(x);
}
template<std::size_t N>
inline bool FASTIO::READ_VAR(std::bitset<N> &x) {
return READ_BITSET(x);
}
// cout modifications
template <typename T>
inline void FASTIO::WRITE_INT(T x) {
if (x < 0) {putchar('-'); x = -x; }
char writeBuffer[20], *writePtr = writeBuffer;
do {
*writePtr++ = '0' + x % 10;
x /= 10;
}
while (x);
do { putchar(*--writePtr); }
while (writePtr > writeBuffer);
}
inline void FASTIO::WRITE_CHAR(char x) {
putchar(x);
}
inline void FASTIO::WRITE_CHAR_ARRAY(const char *x) {
while(*x != '\0')
putchar(*x++);
}
inline void FASTIO::WRITE_STRING(std::string &x) {
for(char c: x)
putchar(c);
}
inline void FASTIO::WRITE_FLOAT(float x) {
printf("%f", x);
}
template <typename T>
inline void FASTIO::WRITE_DOUBLE(T x) {
printf("%lf", (double)x);
}
template<std::size_t N>
inline void FASTIO::WRITE_BITSET(std::bitset<N> &x) {
for(int i = (int)x.size() - 1; i >= 0; i--)
putchar(x[i] + 48);
}
inline void FASTIO::WRITE_VAR(bool x) {
WRITE_INT(x);
}
inline void FASTIO::WRITE_VAR(short int x) {
WRITE_INT(x);
}
inline void FASTIO::WRITE_VAR(int x) {
WRITE_INT(x);
}
inline void FASTIO::WRITE_VAR(long int x) {
WRITE_INT(x);
}
inline void FASTIO::WRITE_VAR(long long int x) {
WRITE_INT(x);
}
inline void FASTIO::WRITE_VAR(unsigned short int x) {
WRITE_INT(x);
}
inline void FASTIO::WRITE_VAR(unsigned int x) {
WRITE_INT(x);
}
inline void FASTIO::WRITE_VAR(unsigned long x) {
WRITE_INT(x);
}
inline void FASTIO::WRITE_VAR(unsigned long long x) {
WRITE_INT(x);
}
inline void FASTIO::WRITE_VAR(std::string &x) {
WRITE_STRING(x);
}
inline void FASTIO::WRITE_VAR(char x) {
WRITE_CHAR(x);
}
inline void FASTIO::WRITE_VAR(const char *x) {
WRITE_CHAR_ARRAY(x);
}
inline void FASTIO::WRITE_VAR(float x) {
WRITE_FLOAT(x);
}
inline void FASTIO::WRITE_VAR(double x) {
WRITE_DOUBLE(x);
}
inline void FASTIO::WRITE_VAR(long double x) {
WRITE_DOUBLE(x);
}
template<std::size_t N>
inline void FASTIO::WRITE_VAR(std::bitset<N> &x) {
WRITE_BITSET(x);
}
Compilation message
historic.cpp:46:0: warning: ignoring #pragma GCC optmization [-Wunknown-pragmas]
#pragma GCC optmization("O3")
historic.cpp: In function 'int main()':
historic.cpp:76:29: warning: left operand of comma operator has no effect [-Wunused-value]
lp(i,0,n) debug("%d " , b[i]) ;
^
historic.cpp:77:14: warning: statement has no effect [-Wunused-value]
debug("\n") ;
^
historic.cpp:78:40: warning: left operand of comma operator has no effect [-Wunused-value]
lp(i,0,qtdB+1) debug("%d %d\n" , ini[i] , fim[i]) ;
^
historic.cpp:78:40: warning: right operand of comma operator has no effect [-Wunused-value]
lp(i,0,qtdB+1) debug("%d %d\n" , ini[i] , fim[i]) ;
~~~~~^
historic.cpp:79:14: warning: statement has no effect [-Wunused-value]
debug("\n") ;
^
historic.cpp: In instantiation of 'void FASTIO::WRITE_INT(T) [with T = bool]':
historic.cpp:366:14: required from here
historic.cpp:325:9: warning: comparison of constant '0' with boolean expression is always false [-Wbool-compare]
if (x < 0) {putchar('-'); x = -x; }
~~^~~
historic.cpp:61:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &n , &q) ;
~~~~~^~~~~~~~~~~~~~~~~
historic.cpp:62:17: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
lp(i,0,n) scanf("%d", &a[i]) ;
~~~~~^~~~~~~~~~~~~
historic.cpp:105:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d", &l, &r ) ;
~~~~~^~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
4 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
376 KB |
Output is correct |
5 |
Correct |
2 ms |
364 KB |
Output is correct |
6 |
Correct |
2 ms |
376 KB |
Output is correct |
7 |
Correct |
2 ms |
376 KB |
Output is correct |
8 |
Correct |
2 ms |
376 KB |
Output is correct |
9 |
Correct |
2 ms |
376 KB |
Output is correct |
10 |
Correct |
2 ms |
376 KB |
Output is correct |
11 |
Correct |
2 ms |
376 KB |
Output is correct |
12 |
Correct |
2 ms |
376 KB |
Output is correct |
13 |
Correct |
2 ms |
376 KB |
Output is correct |
14 |
Correct |
1 ms |
376 KB |
Output is correct |
15 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
3 ms |
376 KB |
Output is correct |
3 |
Correct |
4 ms |
376 KB |
Output is correct |
4 |
Correct |
7 ms |
504 KB |
Output is correct |
5 |
Correct |
13 ms |
504 KB |
Output is correct |
6 |
Correct |
20 ms |
632 KB |
Output is correct |
7 |
Correct |
20 ms |
632 KB |
Output is correct |
8 |
Correct |
19 ms |
632 KB |
Output is correct |
9 |
Correct |
20 ms |
632 KB |
Output is correct |
10 |
Correct |
24 ms |
888 KB |
Output is correct |
11 |
Correct |
24 ms |
888 KB |
Output is correct |
12 |
Correct |
24 ms |
888 KB |
Output is correct |
13 |
Correct |
23 ms |
888 KB |
Output is correct |
14 |
Correct |
22 ms |
760 KB |
Output is correct |
15 |
Correct |
23 ms |
760 KB |
Output is correct |
16 |
Correct |
20 ms |
632 KB |
Output is correct |
17 |
Correct |
20 ms |
604 KB |
Output is correct |
18 |
Correct |
22 ms |
760 KB |
Output is correct |
19 |
Correct |
25 ms |
888 KB |
Output is correct |
20 |
Correct |
26 ms |
1016 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
2 ms |
376 KB |
Output is correct |
5 |
Correct |
4 ms |
504 KB |
Output is correct |
6 |
Correct |
3 ms |
504 KB |
Output is correct |
7 |
Correct |
6 ms |
888 KB |
Output is correct |
8 |
Correct |
11 ms |
2040 KB |
Output is correct |
9 |
Correct |
27 ms |
5880 KB |
Output is correct |
10 |
Correct |
35 ms |
2040 KB |
Output is correct |
11 |
Correct |
180 ms |
4344 KB |
Output is correct |
12 |
Correct |
122 ms |
4600 KB |
Output is correct |
13 |
Correct |
336 ms |
20472 KB |
Output is correct |
14 |
Correct |
2334 ms |
105664 KB |
Output is correct |
15 |
Execution timed out |
4043 ms |
148396 KB |
Time limit exceeded |
16 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
40 ms |
764 KB |
Output is correct |
2 |
Correct |
89 ms |
1628 KB |
Output is correct |
3 |
Correct |
183 ms |
5564 KB |
Output is correct |
4 |
Correct |
458 ms |
15052 KB |
Output is correct |
5 |
Correct |
631 ms |
22776 KB |
Output is correct |
6 |
Correct |
442 ms |
10820 KB |
Output is correct |
7 |
Correct |
360 ms |
4560 KB |
Output is correct |
8 |
Correct |
413 ms |
4472 KB |
Output is correct |
9 |
Correct |
473 ms |
4724 KB |
Output is correct |
10 |
Correct |
471 ms |
4848 KB |
Output is correct |
11 |
Correct |
480 ms |
4960 KB |
Output is correct |
12 |
Correct |
575 ms |
6008 KB |
Output is correct |
13 |
Correct |
1303 ms |
21496 KB |
Output is correct |
14 |
Correct |
1952 ms |
85892 KB |
Output is correct |
15 |
Correct |
2126 ms |
148296 KB |
Output is correct |
16 |
Correct |
2037 ms |
116440 KB |
Output is correct |
17 |
Correct |
2028 ms |
104796 KB |
Output is correct |
18 |
Correct |
1985 ms |
95512 KB |
Output is correct |
19 |
Correct |
1898 ms |
89436 KB |
Output is correct |
20 |
Correct |
2095 ms |
82868 KB |
Output is correct |
21 |
Correct |
1855 ms |
77416 KB |
Output is correct |
22 |
Correct |
1821 ms |
73128 KB |
Output is correct |
23 |
Correct |
1801 ms |
69900 KB |
Output is correct |
24 |
Correct |
1906 ms |
66112 KB |
Output is correct |
25 |
Correct |
481 ms |
6392 KB |
Output is correct |