QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#23306 | #1877. Matryoshka Dolls | zfz2 | RE | 9ms | 6060kb | C++14 | 5.8kb | 2022-03-14 20:39:45 | 2022-04-30 02:47:14 |
Judging History
answer
#pragma GCC optimize(2)
//#include <bits/stdc++.h>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <climits>
#include <functional>
#include <cstring>
#include <string>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <vector>
#include <stack>
#include <queue>
#include <deque>
#include <map>
#include <set>
#include <bitset>
#include <complex>
//#include <random>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/priority_queue.hpp>
#define itn int
#define nit int
#define ll long long
#define ms multiset
#define F(i,a,b) for(register int i=a,i##end=b;i<=i##end;++i)
#define UF(i,a,b) for(register int i=a,i##end=b;i>=i##end;--i)
#define re register
#define ri re int
#define il inline
#define pii pair<int,int>
#define cp complex<double>
#define vi vector<int>
#define ull unsigned long long
#define mem0(x) memset(x,0,sizeof(x))
#define mem0x3f(x) memset(x,0x3f,sizeof(x))
using namespace std;
//using namespace __gnu_pbds;
const double Pi=acos(-1);
namespace fastIO {
template<class T>
inline void read(T &x) {
x=0;
bool fu=0;
char ch=0;
while(ch>'9'||ch<'0') {
ch=getchar();
if(ch=='-')fu=1;
}
while(ch<='9'&&ch>='0') x=(x*10-48+ch),ch=getchar();
if(fu)x=-x;
}
inline int read() {
int x=0;
bool fu=0;
char ch=0;
while(ch>'9'||ch<'0') {
ch=getchar();
if(ch=='-')fu=1;
}
while(ch<='9'&&ch>='0') x=(x*10-48+ch),ch=getchar();
return fu?-x:x;
}
template<class T,class... Args>
inline void read(T& t,Args&... args) {
read(t);
read(args...);
}
char _n_u_m_[40];
template<class T>
inline void write(T x) {
if(x==0){
putchar('0');
return;
}
T tmp = x > 0 ? x : -x ;
if( x < 0 ) putchar('-') ;
register int cnt = 0 ;
while( tmp > 0 ) {
_n_u_m_[ cnt ++ ] = tmp % 10 + '0' ;
tmp /= 10 ;
}
while( cnt > 0 ) putchar(_n_u_m_[ -- cnt ]) ;
}
template<class T>
inline void write(T x ,char ch) {
write(x);
putchar(ch);
}
}
using namespace fastIO;
struct trie{
unsigned sum1,ch1,sum2[32],ch2[32],sum3[1024],ch3[1024],sum4[1<<15],ch4[1<<15];
inline void add(int pos){
++sum4[pos>>5];
ch4[pos>>5]|=(1u<<(pos&31));
++sum3[pos>>10];
ch3[pos>>10]|=(1u<<(pos>>5&31));
++sum2[pos>>15];
ch2[pos>>15]|=(1u<<(pos>>10&31));
++sum1;
ch1|=(1u<<(pos>>15));
}
inline void mns(int pos){
ch4[pos>>5]^=(1u<<(pos&31));
if(!(--sum4[pos>>5]))
ch3[pos>>10]^=(1u<<(pos>>5&31));
if(!(--sum3[pos>>10]))
ch2[pos>>15]^=(1u<<(pos>>10&31));
if(!(--sum2[pos>>15]))
ch1^=(1u<<(pos>>15));
--sum1;
}
inline int pre(int pos){
if(ch4[pos>>5]&(1u<<(pos&31))-1){
return (pos>>5<<5)|31-__builtin_clz(ch4[pos>>5]&(1u<<(pos&31))-1);
}
pos>>=5;
if(ch3[pos>>5]&(1u<<(pos&31))-1){
pos=(pos>>5<<5)|31-__builtin_clz(ch3[pos>>5]&(1u<<(pos&31))-1);
return pos<<5|(31-__builtin_clz(ch4[pos]));
}
pos>>=5;
if(ch2[pos>>5]&(1u<<(pos&31))-1){
pos=(pos>>5<<5)|31-__builtin_clz(ch2[pos>>5]&(1u<<(pos&31))-1);
pos=pos<<5|(31-__builtin_clz(ch3[pos]));
return pos<<5|(31-__builtin_clz(ch4[pos]));
}
pos>>=5;
if(ch1&(1u<<(pos&31))-1){
pos=(pos>>5<<5)|31-__builtin_clz(ch1&(1u<<(pos&31))-1);
pos=pos<<5|(31-__builtin_clz(ch2[pos]));
pos=pos<<5|(31-__builtin_clz(ch3[pos]));
return pos<<5|(31-__builtin_clz(ch4[pos]));
}
return 0;
}
inline int suf(int pos){
++pos;
if(ch4[pos>>5]&(~((1u<<(pos&31))-1))){
return (pos>>5<<5)|__builtin_ctz(ch4[pos>>5]&(~((1u<<(pos&31))-1)));
}
pos>>=5;++pos;
if(ch3[pos>>5]&(~((1u<<(pos&31))-1))){
pos=(pos>>5<<5)|__builtin_ctz(ch3[pos>>5]&(~((1u<<(pos&31))-1)));
return pos<<5|__builtin_ctz(ch4[pos]);
}
pos>>=5;++pos;
if(ch2[pos>>5]&(~((1u<<(pos&31))-1))){
pos=(pos>>5<<5)|__builtin_ctz(ch2[pos>>5]&(~((1u<<(pos&31))-1)));
pos=pos<<5|__builtin_ctz(ch3[pos]);
return pos<<5|__builtin_ctz(ch4[pos]);
}
pos>>=5;++pos;
if(ch1&(~((1u<<(pos&31))-1))){
pos=(pos>>5<<5)|__builtin_ctz(ch1&(~((1u<<(pos&31))-1)));
pos=pos<<5|__builtin_ctz(ch2[pos]);
pos=pos<<5|__builtin_ctz(ch3[pos]);
return pos<<5|__builtin_ctz(ch4[pos]);
}
return 0;
}
}T;
int n,m,a[500002],p[500002];
int B=900;
struct Q{
int l,r,id;
}q[500002];
inline bool cmp(const Q &x,const Q &y){
return ((x.l-1)/B==(y.l-1)/B)?(((x.l-1)/B&1)?x.r<y.r:x.r>y.r):x.l<y.l;
}
ll ans,res[500002];
inline void dbg(){
while(true){
int opt=read();
if(opt==1){
T.add(read());
}if(opt==2)T.mns(read());
if(opt==3)write(T.pre(read()),'\n');
if(opt==4)write(T.suf(read()),'\n');
}
}
int main() {//dbg();return 0;
// freopen("rrads.in","r",stdin);
// freopen("rrads.out","w",stdout);
cin>>n>>m;
B=n/sqrt(m);
F(i,1,n)p[a[i]=read()]=i;
F(i,1,m){
read(q[i].l);read(q[i].r);q[i].id=i;
}
sort(q+1,q+m+1,cmp);
int l=1,r=0,x,y;
F(i,1,m){
while(l>q[i].l){
--l;
if(x=T.pre(a[l]))ans+=p[x]-l;
if(y=T.suf(a[l]))ans+=p[y]-l;
if(x&&y)ans-=(p[x]<p[y]?p[y]-p[x]:p[x]-p[y]);
T.add(a[l]);//cerr<<l<<" "<<r<<" "<<ans<<endl;
}
while(r<q[i].r){
++r;
if(x=T.pre(a[r]))ans+=r-p[x];
if(y=T.suf(a[r]))ans+=r-p[y];
if(x&&y)ans-=(p[x]<p[y]?p[y]-p[x]:p[x]-p[y]);
T.add(a[r]);//cerr<<l<<" "<<r<<" "<<ans<<endl;
}
while(l<q[i].l){
if(x=T.pre(a[l]))ans-=p[x]-l;
if(y=T.suf(a[l]))ans-=p[y]-l;
if(x&&y)ans+=(p[x]<p[y]?p[y]-p[x]:p[x]-p[y]);
T.mns(a[l++]);//cerr<<l<<" "<<r<<" "<<ans<<endl;
}
while(r>q[i].r){
if(x=T.pre(a[r]))ans-=r-p[x];
if(y=T.suf(a[r]))ans-=r-p[y];
if(x&&y)ans+=(p[x]<p[y]?p[y]-p[x]:p[x]-p[y]);
T.mns(a[r--]);//cerr<<l<<" "<<r<<" "<<ans<<" "<<x<<" "<<y<<endl;
}
res[q[i].id]=ans;
}
F(i,1,m)write(res[i],'\n');
return 0;
}
/*
10
10
1 2 3 4 5 6 7 8 9 10
1 10
2 9
3 8
4 7
5 6
1 5
2 6
3 7
4 8
5 9
*/
详细
Test #1:
score: 100
Accepted
time: 3ms
memory: 5676kb
input:
5 5 1 5 2 4 3 1 5 1 4 1 3 1 2 1 1
output:
7 5 3 1 0
result:
ok 5 number(s): "7 5 3 1 0"
Test #2:
score: 0
Accepted
time: 3ms
memory: 5732kb
input:
1 1 1 1 1
output:
0
result:
ok 1 number(s): "0"
Test #3:
score: 0
Accepted
time: 9ms
memory: 6060kb
input:
100000 1 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162 164 166 168 170 172 ...
output:
4999950000
result:
ok 1 number(s): "4999950000"
Test #4:
score: 0
Accepted
time: 1ms
memory: 5536kb
input:
20 1 12 8 13 10 18 14 1 19 5 16 15 9 17 20 6 2 11 4 3 7 9 18
output:
36
result:
ok 1 number(s): "36"
Test #5:
score: 0
Accepted
time: 3ms
memory: 5736kb
input:
20 10 5 16 11 7 19 8 12 13 17 18 6 1 14 3 4 2 15 20 10 9 7 11 7 13 7 17 11 15 1 7 4 6 1 5 6 14 3 5 9 9
output:
7 16 34 9 20 3 8 22 3 0
result:
ok 10 numbers
Test #6:
score: 0
Accepted
time: 3ms
memory: 5748kb
input:
20 50 7 3 13 8 9 18 1 15 12 10 20 11 17 16 2 19 5 4 6 14 3 6 5 15 11 20 10 18 9 20 3 17 13 20 16 17 3 20 4 17 15 18 5 19 3 14 8 20 2 20 1 4 15 19 16 20 5 13 14 17 4 10 6 16 8 16 1 12 4 9 11 15 4 20 8 11 3 16 7 7 3 11 3 7 4 4 5 12 6 20 3 14 6 19 6 19 2 14 2 12 5 6 4 6 8 15 10 19 4 14 1 16 1 20 2 13 3...
output:
6 48 36 24 46 74 17 1 104 64 5 68 44 58 130 5 9 8 30 7 13 48 26 38 11 8 92 5 70 0 28 9 0 20 80 44 58 58 48 36 1 2 20 28 34 76 136 46 1 28
result:
ok 50 numbers
Test #7:
score: 0
Accepted
time: 3ms
memory: 5740kb
input:
20 100 4 13 20 8 1 18 19 9 17 5 12 7 11 16 6 3 15 10 14 2 4 19 1 6 6 19 4 6 2 17 1 5 11 13 1 15 9 17 9 15 7 20 3 19 10 19 1 10 11 17 10 17 2 18 17 20 12 19 1 3 5 17 7 13 6 18 10 20 1 6 2 17 5 9 4 13 11 13 2 20 7 13 12 17 5 19 17 20 11 19 3 15 3 5 5 11 1 17 10 15 16 20 1 6 2 19 4 12 5 18 9 17 3 6 12 ...
output:
76 16 57 3 84 10 3 74 31 19 59 80 40 44 16 26 94 5 26 2 54 17 53 44 16 84 8 32 3 106 17 12 68 5 30 48 2 16 102 14 9 16 98 28 64 31 6 1 54 20 26 31 74 5 26 3 66 32 36 59 1 26 6 33 35 5 57 1 1 57 24 6 10 68 36 41 34 0 12 8 11 2 62 12 41 10 5 25 0 60 0 44 25 12 8 2 16 36 8 1
result:
ok 100 numbers
Test #8:
score: 0
Accepted
time: 0ms
memory: 5652kb
input:
20 228 7 3 17 10 16 11 19 5 1 13 20 18 14 2 8 4 6 9 12 15 7 20 2 20 10 13 14 19 1 9 12 20 17 19 9 20 10 12 14 17 4 15 7 16 5 12 13 16 16 18 7 18 1 11 7 17 2 20 6 8 9 17 12 18 7 18 3 4 7 13 1 4 6 12 6 10 3 17 3 4 5 14 7 13 9 20 6 20 2 4 14 17 17 20 1 7 19 20 4 20 14 15 12 16 4 6 4 15 10 11 2 16 2 20 ...
output:
66 136 5 9 32 30 2 42 3 5 62 40 28 5 2 50 44 44 136 3 20 14 50 1 16 5 18 10 74 1 44 16 42 90 3 5 3 13 1 108 1 6 3 62 1 94 136 3 14 42 3 80 26 6 54 7 26 26 31 1 74 38 15 14 52 26 14 6 4 7 3 2 70 13 2 44 6 76 26 90 1 66 108 0 28 16 132 18 7 3 14 48 7 15 1 8 9 22 9 18 36 5 70 44 42 3 1 42 0 3 3 8 3 62 ...
result:
ok 228 numbers
Test #9:
score: 0
Accepted
time: 2ms
memory: 5684kb
input:
20 322 3 11 4 1 9 19 7 12 5 17 8 15 10 18 13 2 20 16 14 6 8 14 6 6 3 17 3 16 9 18 7 17 12 13 4 14 12 18 6 13 8 9 3 17 7 20 12 16 10 15 12 16 12 14 16 19 6 7 18 20 6 16 7 14 5 19 12 13 3 14 10 15 11 18 12 20 8 9 1 13 17 18 1 18 4 19 4 9 5 19 4 5 1 2 10 17 11 19 7 14 15 20 20 20 4 7 12 15 7 17 3 13 7 ...
output:
19 0 91 80 37 39 1 48 21 23 1 91 81 10 13 10 3 5 1 2 44 23 87 1 50 13 25 37 1 58 1 119 99 14 87 1 1 21 33 23 15 0 6 7 39 42 36 1 91 3 107 25 1 44 1 0 10 7 1 1 55 3 10 2 34 91 1 51 26 25 75 1 1 18 79 13 1 80 21 16 5 3 0 18 3 7 63 63 66 3 0 5 17 0 21 10 1 3 5 1 6 35 41 29 59 43 21 0 45 3 6 75 1 103 0 ...
result:
ok 322 numbers
Test #10:
score: -100
Runtime Error
input:
20 1000 16 6 17 1 12 11 5 8 10 19 4 18 2 9 14 7 15 3 20 13 1 6 8 9 9 11 5 18 3 20 2 9 17 18 12 12 12 20 5 17 1 8 10 10 2 9 17 19 1 7 7 15 12 19 2 7 9 14 2 14 1 4 15 17 11 19 2 5 3 12 11 14 11 14 13 17 7 8 9 18 2 11 8 11 1 4 4 8 12 13 12 19 7 16 12 16 11 15 5 9 5 18 2 19 11 15 1 15 4 20 4 9 5 14 5 19...