第一篇ABC题解
开始时间:\(2024/8/10\)。
A:
模拟即可
B:
模拟即可
C:
不是,哥们。
这不就是纯纯的唐氏 set 板子吗?
对于指令一,我们将 \(x\) 放入 \(set\) 中,并维护一个桶,统计该元素的个数。
对于指令二,判断桶中该元素减一后是否不为零,否则就要把 \(set\) 中的元素弹出。
最后一个就直接输出 set.size() 就行了。
// LUOGU_RID: 172115170
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
const int mod=1;
int ksm(int x,int k)
{
int ans=1,base=x;
while(k)
{
if(k&1) ans=1ll*ans*base%mod;
base=1ll*base*base%mod; k>>=1;
}
return ans;
}
int read()
{
int f=1,x=0;char ch;
do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
return f*x;
}
int n;
set<int>s;
int t[N];
signed main()
{
n=read();
while(n--)
{
int opt,x;
opt=read();
if(opt==1)
{
x=read();
s.insert(x);
t[x]++;
}
else if(opt==2)
{
x=read();
if(t[x])
{
t[x]--;
if(!t[x])
s.erase(x);
}
}
else
{
cout<<s.size()<<'\n';
}
}
return 0;
}
D:
省流:三位前缀和。
了解二维的前缀和就可以刀这道题了。
对于三位前缀和,我们就用数组输入的每一个值记录来预处理。式子为:
\[f[i][j][k]=f[i-1][j][k]+f[i][j-1][k]+f[i][j][k-1]-f[i-1][j-1][k]-f[i][j-1][k-1]+f[i-1][j][k-1]+f[i-1][j-1][k-1]+a[i][j][k]
\]
然后在输出时照着上述式子稍作改动即可。
输出的式子为:
\[f[r1][r2][r3]-f[l1-1][r2][r3]-f[r1][l2-1][r3]-f[r1][r2][l3-1]+f[l1-1][l2-1][r3]+f[r1][l2-1][l3-1]+f[l1-1][r2][l3-1]-f[l1-1][l2-1][l3-1]
\]
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=114514;
const int mod=1;
int ksm(int x,int k)
{
int ans=1,base=x;
while(k)
{
if(k&1) ans=1ll*ans*base%mod;
base=1ll*base*base%mod; k>>=1;
}
return ans;
}
int read()
{
int f=1,x=0;char ch;
do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
return f*x;
}
int n,q;
int a[105][105][105];
int f[105][105][105];
signed main()
{
n=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
{
a[i][j][k]=read();
f[i][j][k]=f[i-1][j][k]+f[i][j-1][k]+f[i][j][k-1]-f[i-1][j-1][k]-f[i][j-1][k-1]-f[i-1][j][k-1]+f[i-1][j-1][k-1]+a[i][j][k];
}
q=read();
while(q--)
{
int l1,r1,l2,r2,l3,r3;
l1=read();
r1=read();
l2=read();
r2=read();
l3=read();
r3=read();
cout<<f[r1][r2][r3]-f[l1-1][r2][r3]-f[r1][l2-1][r3]-f[r1][r2][l3-1]+f[l1-1][l2-1][r3]+f[r1][l2-1][l3-1]+f[l1-1][r2][l3-1]-f[l1-1][l2-1][l3-1]<<'\n';
}
return 0;
}
浙公网安备 33010602011771号