当我只是水结论敲个板子吧...下次不开这么没意思的题目..
必要性证明完了就可以过,有些题解证明不是很懂.那就按必要性水一发吧.
#include <bits/stdc++.h>
using namespace std;
const int N=3e5+4;
long long odd=0,even=0,tot=0,sum[3][N];
int n;
int lowbit(int x) { return x&(-x); }
void add(int pos,int val,int op)
{
while(pos<=n)
{
sum[op][pos]+=val;
pos+=lowbit(pos);
}
}
long long query(int pos,int op)
{
long long res=0;
while(pos)
{
res+=sum[op][pos];
pos-=lowbit(pos);
}return res;
}
int main()
{
bool flag=true;
int x;
scanf("%d",&n);
for(long long i=1;i<=n;i++)
{
scanf("%d",&x);
if(x&1)
{
odd+=query(n,1)-query(x,1);
tot+=query(n,0)-query(x,0);
add(x,1,1);
add(x,1,0);
}
else
{
even+=query(n,2)-query(x,2);
tot+=query(n,0)-query(x,0);
add(x,1,2);
add(x,1,0);
}
if(x%2!=i%2) flag=false;
}
if((even*3+odd*3)!=tot) flag=false;
if(tot%3!=0) flag=false;
if(flag) puts("Yes");
else puts("No");
return 0;
}
下次写这题,好像很难的样子,https://www.luogu.com.cn/problem/AT2274 那咋先去回刷一下kuangbin.

京公网安备 11010502036488号