Submission #41038273
Source Code Expand
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
const int MAXN=2e5+10;
int n,m,a[MAXN],b[MAXN],arr[MAXN];
ll ans,L[MAXN],R[MAXN];
deque<int>dq;
vector<int>v[MAXN];
struct BIT{
int t[MAXN];
void mdf(int x,int v){for(;x<=n;x+=lowbit(x))t[x]+=v;}
int qry(int x){int S=0;for(;x;x-=lowbit(x))S+=t[x];return S;}
int qry(int L,int R){return (L>R)?(0):(qry(R)-qry(L-1));}
}bit;
int chk(int L,int R){
return bit.qry(L+1,R-1)==0;
}
int p[MAXN],q[MAXN],s[2][MAXN],tot;
int qry(int x,int L,int R){
return (L>R)?(0):(s[x][R]-s[x][L-1]);
}
void calc(int* p,int tot,int v){
rep(i,1,tot){
s[0][i] = s[0][i-1]+L[p[i]];
s[1][i] = s[1][i-1]+R[p[i]];
}
rep(i,m,tot){
ans += (R[p[i]] * s[0][i-m+1])*v;
}
}
void calc(){
int x=a[dq.front()]; //值为x
vector<int>v(0);
while(dq.size() && a[dq.front()]==x){
v.push_back(dq.front());
dq.pop_front();
}
sort(v.begin(),v.end());
int sz=v.size();
if(!sz)return;
rep(i,0,sz-1)bit.mdf(v[i],-1);
for(int l=0,r;l<sz;l=r+1){
r=l;while(r+1<sz && chk(v[l],v[r+1]))r++;
//合并[l,r]段
tot=0;rep(i,l,r)p[++tot]=v[i];
if(tot<m){
rep(i,1,tot)bit.mdf(p[i],1);
continue;
}
for(int i=1;i<=tot;){
if(b[p[i]]){i++;continue;}
int cur=0,j=i;
while(j<tot && !b[p[j+1]])j++;
rep(k,i,j)q[++cur]=p[k];
calc(q,cur,-1);
i=j+1;
}
calc(p,tot,1);
int cnt=tot/m;
rep(i,1,cnt){
bit.mdf(p[i],1);
dq.push_front(p[i]);
a[p[i]]=x+1;
b[p[i]]=0;
L[p[cnt-i+1]]=qry(0,tot-min(tot,m*(i+1)-1)+1,tot-m*i+1);
R[p[i]]=qry(1,m*i,min(tot,m*(i+1)-1));
}
}
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
rep(i,1,n)cin>>a[i];
iota(arr+1,arr+1+n,1);
sort(arr+1,arr+1+n,[&](int x,int y){return a[x] < a[y];});
rep(i,1,n)dq.push_back(arr[i]);
ans=n;
rep(i,1,n)bit.mdf(i,1),b[i]=1;
rep(i,1,n)L[i]=R[i]=1;
while(dq.size())calc();
cout<<ans<<endl;
return 0;
}
Submission Info
| Submission Time |
|
| Task |
F - Counting of Subarrays |
| User |
Crying |
| Language |
C++ (GCC 9.2.1) |
| Score |
1800 |
| Code Size |
2331 Byte |
| Status |
AC |
| Exec Time |
78 ms |
| Memory |
17232 KB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
1800 / 1800 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample01.txt, sample02.txt, sample03.txt |
| All |
sample01.txt, sample02.txt, sample03.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in40.txt, in41.txt, in42.txt, in43.txt, in44.txt, in45.txt, in46.txt, in47.txt, in48.txt, in49.txt, in50.txt, in51.txt, in52.txt, in53.txt, in54.txt, in55.txt, in56.txt, in57.txt, in58.txt, sample01.txt, sample02.txt, sample03.txt |
| Case Name |
Status |
Exec Time |
Memory |
| in01.txt |
AC |
10 ms |
8300 KB |
| in02.txt |
AC |
7 ms |
8388 KB |
| in03.txt |
AC |
8 ms |
8356 KB |
| in04.txt |
AC |
10 ms |
8232 KB |
| in05.txt |
AC |
11 ms |
8252 KB |
| in06.txt |
AC |
12 ms |
8308 KB |
| in07.txt |
AC |
13 ms |
8312 KB |
| in08.txt |
AC |
10 ms |
8240 KB |
| in09.txt |
AC |
13 ms |
8344 KB |
| in10.txt |
AC |
11 ms |
8316 KB |
| in11.txt |
AC |
9 ms |
8368 KB |
| in12.txt |
AC |
7 ms |
8340 KB |
| in13.txt |
AC |
9 ms |
8308 KB |
| in14.txt |
AC |
10 ms |
8312 KB |
| in15.txt |
AC |
13 ms |
8320 KB |
| in16.txt |
AC |
9 ms |
8368 KB |
| in17.txt |
AC |
11 ms |
8240 KB |
| in18.txt |
AC |
59 ms |
14656 KB |
| in19.txt |
AC |
52 ms |
14216 KB |
| in20.txt |
AC |
47 ms |
13800 KB |
| in21.txt |
AC |
70 ms |
14832 KB |
| in22.txt |
AC |
51 ms |
14488 KB |
| in23.txt |
AC |
57 ms |
14624 KB |
| in24.txt |
AC |
56 ms |
14332 KB |
| in25.txt |
AC |
43 ms |
13700 KB |
| in26.txt |
AC |
45 ms |
14488 KB |
| in27.txt |
AC |
45 ms |
14804 KB |
| in28.txt |
AC |
38 ms |
14008 KB |
| in29.txt |
AC |
60 ms |
13900 KB |
| in30.txt |
AC |
67 ms |
14912 KB |
| in31.txt |
AC |
56 ms |
14464 KB |
| in32.txt |
AC |
50 ms |
13876 KB |
| in33.txt |
AC |
67 ms |
14796 KB |
| in34.txt |
AC |
64 ms |
14312 KB |
| in35.txt |
AC |
78 ms |
15392 KB |
| in36.txt |
AC |
60 ms |
13912 KB |
| in37.txt |
AC |
60 ms |
14016 KB |
| in38.txt |
AC |
65 ms |
14440 KB |
| in39.txt |
AC |
70 ms |
14932 KB |
| in40.txt |
AC |
69 ms |
14872 KB |
| in41.txt |
AC |
76 ms |
15272 KB |
| in42.txt |
AC |
72 ms |
15264 KB |
| in43.txt |
AC |
64 ms |
14392 KB |
| in44.txt |
AC |
59 ms |
13684 KB |
| in45.txt |
AC |
63 ms |
14252 KB |
| in46.txt |
AC |
60 ms |
14164 KB |
| in47.txt |
AC |
46 ms |
16152 KB |
| in48.txt |
AC |
51 ms |
16496 KB |
| in49.txt |
AC |
59 ms |
17232 KB |
| in50.txt |
AC |
64 ms |
17040 KB |
| in51.txt |
AC |
52 ms |
16016 KB |
| in52.txt |
AC |
58 ms |
16316 KB |
| in53.txt |
AC |
53 ms |
14228 KB |
| in54.txt |
AC |
51 ms |
14076 KB |
| in55.txt |
AC |
58 ms |
14888 KB |
| in56.txt |
AC |
56 ms |
14004 KB |
| in57.txt |
AC |
54 ms |
14264 KB |
| in58.txt |
AC |
67 ms |
15180 KB |
| sample01.txt |
AC |
7 ms |
8300 KB |
| sample02.txt |
AC |
10 ms |
8244 KB |
| sample03.txt |
AC |
8 ms |
8244 KB |