jzoj 4243. 【五校联考6day1】c 分块
来源:互联网 发布:云计算和分布式计算 编辑:程序博客网 时间:2024/06/07 02:43
分析:这是本蒟蒻第一次打分块,因为不熟练所以调了n久,调了一晚最后发现原来是数组开小了!
把序列分成根号n块
对于每个块维护一个桶
对于add操作多余块暴力修改其余块加标记
对于查询操作同上
代码:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<cmath>#define ll long long#define inf 0x7fffffff#define N 100005using namespace std;int n,m,block,sblock,sw,w[40],pos[N],a[N],t[1000][100005],add[1000],s[1000],e[1000];void work(){for (int i=1;i<=10000;i++){int flag=0,j=i;while (j){if (j%10!=4&&j%10!=7) {flag=1;break;}j/=10;}if (!flag) w[++sw]=i;}}void reset(){for (int i=1;i<=n;i++)t[pos[i]][a[i]]++;}void updata(int x,int y,int z){if (pos[x]==pos[y])for (int i=x;i<=y;i++){t[pos[x]][a[i]]--;a[i]+=z;t[pos[x]][a[i]]++;}else{for (int i=x;i<=e[pos[x]];i++){t[pos[x]][a[i]]--;a[i]+=z;t[pos[x]][a[i]]++;}for (int i=s[pos[y]];i<=y;i++){t[pos[y]][a[i]]--;a[i]+=z;t[pos[y]][a[i]]++;}for (int i=pos[x]+1;i<pos[y];i++)add[i]+=z;}}int query(int x,int y){int ans=0;if (pos[x]==pos[y]){for (int i=x;i<=y;i++)for (int j=1;j<=sw;j++)if (a[i]+add[pos[x]]==w[j]) ans++;return ans;}else{for (int i=x;i<=e[pos[x]];i++)for (int j=1;j<=sw;j++)if (a[i]+add[pos[x]]==w[j]) ans++;for (int i=s[pos[y]];i<=y;i++)for (int j=1;j<=sw;j++)if (a[i]+add[pos[y]]==w[j]) ans++;for (int i=pos[x]+1;i<pos[y];i++)for (int j=1;j<=sw;j++)ans+=t[i][w[j]-add[i]];return ans;}}int main(){work();scanf("%d%d",&n,&m);block=int(sqrt(n));for (int i=1;i<=n;i++){scanf("%d",&a[i]);pos[i]=(i-1)/block+1;if (s[pos[i]]==0) s[pos[i]]=i;e[pos[i]]=i;}sblock=(n+block-1)/block;reset();char ch[10];for (int i=1;i<=m;i++){scanf("%s",ch);if (ch[0]=='a') {int x,y,z;scanf("%d%d%d",&x,&y,&z);updata(x,y,z);}else{int x,y;scanf("%d%d",&x,&y);printf("%d\n",query(x,y));}}return 0;}
0 0
- jzoj 4243. 【五校联考6day1】c 分块
- jzoj4243 【五校联考6day1】c 分块
- 【五校联考6day1】c
- JZOJ 4218 【五校联考2day1】补给站
- JZOJ 4219 【五校联考2day1】池塘
- jzoj 4246【五校联考6day2】san
- 【五校联考5day1】登山
- 【五校联考2day1】补给站
- 【五校联考2day1】补给站
- 【五校联考2day1】池塘
- 【宝藏】题解(五校联考3day1)
- [jzoj]4246. 【五校联考6day2】san(高级套路题--拓扑序Dp)
- 【JZOJ 4811】【NOIP2016提高组 五校联考1】排队
- 【JZOJ 4812】【NOIP2016提高组 五校联考2】string
- 【JZOJ 4813】【NOIP2016提高组 五校联考2】running
- 【JZOJ 4814】【NOIP2016提高组 五校联考2】tree
- 【JZOJ 4806】【NOIP2016提高组 五校联考3】打工
- 【JZOJ 4817】【NOIP2016提高组 五校联考4】square
- C++:Boost库智能指针_删除器
- 【React Native】React Native 的开发路(Windows 开发环境配置)
- Python爬虫模拟登陆知乎
- ubuntu14下配置静态ip地址
- 分块の基础,(例题)HDU1556
- jzoj 4243. 【五校联考6day1】c 分块
- mybatis 3.4.2 DataSourceFactory与DataSource
- Codeforces-546D Soldier and Number Game 【质因子分解+打表+DP】
- 什么是JSON
- Oulipo_poj3461_kmp
- 基于Spring的AOP实现自定义annotation操作日志
- C++泛型编程2——类模板,容器适配器,仿函数
- 为何计算机人应该懂一点编译知识?
- Handler线程学习心得