将每个连续的最右端赋值权值1,需要写带修改的主席树,我没写过拿CDQ分治水过

这题居然是全场AC最少的题目,我一个半小时搞定(其实是因为写主席树写了一半发现不会写,改成了CDQ分治)

#include<bits/stdc++.h>
using namespace std;
#define maxn 2000005
int s,w,n,cnt;
int ans[maxn],sum[maxn],A[maxn];
struct data{int x,y,z,pos,id;}a[maxn],b[maxn];
inline bool cmp(data a,data b){if (a.x==b.x&&a.y==b.y) return a.pos<b.pos;else if (a.x==b.x) return a.y<b.y;else return a.x<b.x;
}
inline void add(int x,int v){for(int i=x;i<=w;i+=i&(-i)) sum[i]+=v;
}
inline int query(int x){int ret=0;for(int i=x;i;i-=i&(-i)) ret+=sum[i];return ret;
}
inline void solve(int l,int r){if (l==r) return;int mid=(l+r)/2,l1=l,l2=mid+1; for(int i=l;i<=r;++i){if (a[i].id<=mid&&!a[i].pos) add(a[i].y,a[i].z);if (a[i].id>mid&&a[i].pos) ans[a[i].pos]+=query(a[i].y)*a[i].z;}for(int i=l;i<=r;++i) if (a[i].id<=mid&&!a[i].pos) add(a[i].y,-a[i].z);for(int i=l;i<=r;++i){if (a[i].id<=mid) b[l1++]=a[i];else b[l2++]=a[i];}for(int i=l;i<=r;++i) a[i]=b[i];solve(l,mid);solve(mid+1,r);
}
void add(int x,int y,int z){n++;a[n]=(data){x,y,z,0,n};}
int main(){s=0;int m,x,y,z;cin>>w>>m;for(int i=1;i<=w;++i)scanf("%d",&A[i]);for(int i=1;i<=w;++i){if(A[i]==A[i-1]){x=i-1;y=A[i-1];z=-1;n++;a[n]=(data){x,y,z,0,n};}x=i;y=A[i];z=1;n++;a[n]=(data){x,y,z,0,n};}while(m--){int op;scanf("%d",&op);if (op==1){scanf("%d%d",&x,&y);if(A[x]==y)continue;if(A[x]==A[x-1]&&A[x]==A[x+1]){add(x-1,A[x-1],1);add(x,y,1);}else if(A[x]==A[x-1]&&A[x]!=A[x+1]){add(x-1,A[x-1],1);add(x,A[x],-1);if(A[x+1]!=y)add(x,y,1);}else if(A[x]!=A[x-1]&&A[x]==A[x+1]){if(A[x-1]==y){add(x-1,A[x-1],-1);}add(x,A[x],-1);add(x,y,1);}else if(A[x]!=A[x-1]&&A[x]!=A[x+1]){if(y==A[x-1]&&y==A[x+1]){add(x-1,A[x-1],-1);add(x,A[x],-1);}if(y==A[x-1]&&y!=A[x+1]){add(x-1,A[x-1],-1);add(x,A[x],-1);add(x,y,1);}if(y==A[x+1]&&y!=A[x-1]){add(x,A[x],-1);}if(y!=A[x-1]&&y!=A[x+1]){add(x,A[x],-1);add(x,y,1);}}A[x]=y;}else {int x1,x2,y1,y2;scanf("%d%d%d%d",&x1,&x2,&y1,&y2);--x1,--y1;ans[++cnt]=(x2-x1)*(y2-y1)*s;n++;a[n]=(data){x1,y1,1,cnt,n};n++;a[n]=(data){x1,y2,-1,cnt,n};n++;a[n]=(data){x2,y1,-1,cnt,n};n++;a[n]=(data){x2,y2,1,cnt,n};}}sort(a+1,a+n+1,cmp);solve(1,n);for(int i=1;i<=cnt;i++) printf("%d\n",ans[i]);
}

2019 Nanchang Online Contest Problem I Yukino With Subinterval相关推荐

  1. 2019南昌网络赛  I. Yukino With Subinterval 树状数组套线段树

    I. Yukino With Subinterval 题目链接: Problem Descripe Yukino has an array \(a_1, a_2 \cdots a_n\). As a ...

  2. HDU 2019 Multi-University Training Contest 1 杭电2019多校联合训练赛 第一场 1001 Blank (6578)

    HDU 2019 Multi-University Training Contest 1 杭电2019暑期多校集训第一场 1001 Blank (6578) Problem Description T ...

  3. HDU 6638 [2019 Multi-University Training Contest 6]

    Snowy Smile Problem Description There are n pirate chests buried in Byteland, labeled by 1,2,-,n. Th ...

  4. 2019 ICPC World Finals Problem J. Miniature Golf

    2019 ICPC World Finals Problem J. Miniature Golf Solution 设lll为l0l_0l0​时iii的总分为si,l0s_{i,l_0}si,l0​​ ...

  5. 2019 ICPC World Finals Problem B. Beautiful Bridges

    2019 ICPC World Finals Problem B. Beautiful Bridges Solution 太菜了,sbsbsb题调了一个下午. 首先有一个显然的O(n3)O(n^3)O ...

  6. 2019 Multi-University Training Contest 7 部分补题

    2019 Multi-University Training Contest 7 部分补题 这场比赛三个人一起组队,比赛期间自己感觉并没有奉献多少东西,所以补题.而且总感觉比赛到后期很乏力(没力气那种 ...

  7. 2019年ACM-ICPC - 南昌网络赛I:Yukino With Subinterval【带修主席树】

    题目: 2019ICPC南昌网络赛I:Yukino With Subinterval 题意: 给定长度为 N 的数组,有两种操作:(1)单点修改,(2)查询区间[qL,qR]内有多少个不同的段(连续相 ...

  8. I. Yukino With Subinterval 树套树入门题

    I. Yukino With Subinterval 题意:有两种操作,第一种修改一个位置的值,第二种求给定区间[l,r]内有多少合法区间.合法区间定义:al = al+1 = - = ar ,且该区 ...

  9. 2019 GDUT Rating Contest I : Problem H. Mixing Milk

    题面: H. Mixing Milk Input file: standard input Output file: standard output Time limit: 1 second Memory ...

最新文章

  1. ytu 2335: 0-1背包问题
  2. 2.1 网站防******与企业虚拟化需求分析
  3. 一套完整的java程序_编写一个完整的Java Application 程序
  4. 苹果挂端口方法_调音台变身直播声卡的方法
  5. python接收邮件内容启动程序_如何使用python获取电子邮件的文本内容?
  6. BZOJ3676[APIO2014] 回文串
  7. 详解健康体检信息管理系统技术开发
  8. 闪迪内存卡软件测试,存储卡不稳定?我们用微波炉测试 结果震惊了!
  9. macOS devtools安装github包失败解决
  10. 是时候让打字更“快舒”了-小鹤双拼
  11. oracle简单函数的写法,Oracle 简单函数
  12. think in java interview-高级开发人员面试宝典(十)
  13. 43岁,转行当了大学老师
  14. 如何在数据库中存储用户密码_如何在数据库中存储密码
  15. In Search of the Holy Grail 寻找圣杯 中文翻译
  16. “裸辞” 备战15天三面美团,交叉面却被吊起来锤
  17. 【新歌推荐】崔恕:2011听于文博《孤男寡女》再唱苦情歌
  18. fastDB CLI
  19. regexp_substr()用法
  20. PowerBuilder中图片文件的处理

热门文章

  1. 最全遥感图像数据集(用于深度学习,包括效果图)
  2. Ubuntu下文件解压缩
  3. 国企与互联网公司当程序员,我选择国企,哪怕工资少一截
  4. typora 无法显示内联公式解决办法
  5. 关于市级资助系统资助学生签名上传方法
  6. 清明上河图-分解图[珍藏]
  7. 数字嗅觉将气味模拟系统带入21世纪(Digital Olfaction Brings Scent Systems Into the 21st Century)
  8. 阿里合伙人范禹:常挂在阿里技术人嘴边的四句土话
  9. 【解决】Uncaught SyntaxError: Unexpected end of JSON input at JSON.parse
  10. 获取x-sign/x-mini-wua/x-sgext/x-umt