This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int maxn=1005;
const int maxs=maxn*maxn;
const int kit=12;
int n, m;
typedef long long ll;
ll sol=0;
int a[maxn][maxn];
int val[maxn], h[maxn];
int tab[kit][maxn];
void init() {
memset(val,-1,maxn);
memset(h,0,maxn);
return;
}
void calc_rmq() {
for(int k=1;k<kit;k++) {
for(int j=0;j<m;j++) {
int elso=tab[k-1][j];
int maso=min(m-1,tab[k-1][j+(1<<(k-1))]);
if(h[elso]<h[maso]) {
tab[k][j]=elso;
}
else {
tab[k][j]=maso;
}
}
}
return;
}
int get_rmq(int p1, int p2) {
int k=(int)log2(p2-p1+1);
int poz1=tab[k][p1];
int poz2=tab[k][(p2-(1<<k)+1)];
if(h[poz1]<h[poz2]) {
return poz1;
}
else {
return poz2;
}
}
void eval(int from, int to, int exa) {
if(from>to) return;
int hol=get_rmq(from,to);
int l=to-from+1;
sol+=(ll)(l*(l+1)/2)*(ll)(h[hol]-exa);
exa=h[hol];
eval(from,hol-1,exa);
eval(hol+1,to,exa);
return;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
cin>>a[i][j];
}
}
init();
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(val[j]==a[i][j]) {
h[j]++;
}
else {
val[j]=a[i][j];
h[j]=1;
}
tab[0][j]=j;
}
calc_rmq();
for(int j=0;j<m;j++) {
int veg=j;
while(veg+1<m && val[veg+1]==val[j]) {
veg++;
}
eval(j,veg,0);
j=veg;
}
}
cout<<sol<<endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |