2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化...
秋实大哥与小朋友
Time Limit: 1 Sec Memory Limit: 256 MB
题目连接
http://acm.uestc.edu.cn/#/contest/show/59
Description
秋实大哥以周济天下,锄强扶弱为己任,他常对天长叹:安得广厦千万间,大庇天下寒士俱欢颜。
所以今天他又在给一群小朋友发糖吃。
他让所有的小朋友排成一行,从左到右标号。在接下去的时间中,他有时会给一段区间的小朋友每人v颗糖,有时会问第x个小朋友手里有几颗糖。
这对于没上过学的孩子来说实在太困难了,所以你看不下去了,请你帮助小朋友回答所有的询问。
Input
接下来的m行,每一行表示下面两种操作之一:
0 l r v : 表示秋实大哥给[l,r]这个区间内的小朋友每人v颗糖
1 x : 表示秋实大哥想知道第x个小朋友手里现在有几颗糖
1≤m,v≤100000,1≤l≤r≤n,1≤x≤n,1≤n≤100000000。1≤x≤n,1≤n≤100000000。
Output
Sample Input
0 1 3 1
1 2
0 2 3 3
1 3
Sample Output
4
HINT
题意
题解:
灰常简单的一个区间更新+单点查询问题,但是n比较大!比较大!肿么办?
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;#define LL(x) (x<<1) #define RR(x) (x<<1|1) #define MID(a,b) (a+((b-a)>>1)) const int N=100000*5; typedef long long LL;struct node {int lft,rht;LL sum,add;int mid(){return MID(lft,rht);}void fun(LL tmp){add+=tmp;sum+=(rht-lft+1)*tmp;} };int y[N];struct Segtree {node tree[N*4];void relax(int ind){if(tree[ind].add){tree[LL(ind)].fun(tree[ind].add);tree[RR(ind)].fun(tree[ind].add);tree[ind].add=0;}}void build(int lft,int rht,int ind){tree[ind].lft=lft; tree[ind].rht=rht;tree[ind].sum=0; tree[ind].add=0;if(lft==rht) tree[ind].sum=y[lft];else{int mid=tree[ind].mid();build(lft,mid,LL(ind));build(mid+1,rht,RR(ind));tree[ind].sum=tree[LL(ind)].sum+tree[RR(ind)].sum;}}void updata(int st,int ed,int ind,int add){int lft=tree[ind].lft,rht=tree[ind].rht;if(st<=lft&&rht<=ed) tree[ind].fun(add);else{relax(ind);int mid=tree[ind].mid();if(st<=mid) updata(st,ed,LL(ind),add);if(ed> mid) updata(st,ed,RR(ind),add);tree[ind].sum=tree[LL(ind)].sum+tree[RR(ind)].sum;}}LL query(int st,int ed,int ind){int lft=tree[ind].lft,rht=tree[ind].rht;if(st<=lft&&rht<=ed) return tree[ind].sum;else{relax(ind);int mid=tree[ind].mid();LL sum1=0,sum2=0;if(st<=mid) sum1=query(st,ed,LL(ind));if(ed> mid) sum2=query(st,ed,RR(ind));return sum1+sum2;}} }seg; int kiss[100000*5]; int dow[100000*5]; struct oi {int x,y,c,id,ty; }; oi ans[100000*5]; int tot1,tot2=1; int getid(int x) {int l=1,r=tot2;int mid=(l+r)>>1;while(dow[mid]!=x&&dow[l]!=x&&dow[r]!=x){mid=(l+r)>>1;if(dow[mid]>x)r=mid;elsel=mid+1;}if(dow[mid]==x)return mid;if(dow[l]==x)return l;if(dow[r]==x)return r; } int main() {int n,m;while(scanf("%d%d",&n,&m)!=EOF){char str[5];int a,b,c;memset(y,0,sizeof(y));seg.build(1,100000*3,1);for(int i=0;i<m;i++){scanf("%s",str);if(str[0]=='1'){scanf("%d",&a);ans[i].x=a,ans[i].y=a,ans[i].c=1,ans[i].id=i,ans[i].ty=-1;kiss[tot1++]=a;}else{scanf("%d%d%d",&a,&b,&c);ans[i].x=a,ans[i].y=b,ans[i].c=c,ans[i].id=i,ans[i].ty=1;kiss[tot1++]=a;kiss[tot1++]=b;}}tot2=0;sort(kiss,kiss+tot1);for(int i=0;i<tot1;i++)if(dow[tot2]!=kiss[i])dow[++tot2]=kiss[i];for(int i=0;i<m;i++){if(ans[i].ty==-1){int x=getid(ans[i].x);printf("%lld\n",seg.query(x,x,1));}else{int x=getid(ans[i].x),y=getid(ans[i].y),z=ans[i].c;seg.updata(x,y,1,z);}}}return 0; }
转载于:https://www.cnblogs.com/qscqesze/p/4426296.html
2015 UESTC 数据结构专题A题 秋实大哥与小朋友 线段树 区间更新,单点查询,离散化...相关推荐
- 2015 UESTC 数据结构专题N题 秋实大哥搞算数 表达式求值/栈
秋实大哥搞算数 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1074 Des ...
- 2015 UESTC 数据结构专题H题 秋实大哥打游戏 带权并查集
秋实大哥打游戏 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Descr ...
- 2015 UESTC 数据结构专题G题 秋实大哥去打工 单调栈
秋实大哥去打工 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Descr ...
- 2015 UESTC 数据结构专题D题 秋实大哥与战争 变化版本的线段树,合并区间,单点查询...
D - 秋实大哥与战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 D ...
- cdoj 2015数据结构专题:D - 秋实大哥与战争
男儿何不带吴钩,收取关山五十州. 征战天下是秋实大哥一生的梦想,所以今天他又在练习一个对战游戏. 秋实大哥命令所有士兵从左到右排成了一行来抵挡敌人的攻击. 敌方每一次会攻击一个士兵,这个士兵就会阵亡, ...
- UESTC - 1057 秋实大哥与花 线段树
题意 秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前. 所以秋实大哥精心照料了很多花朵.现在所有的花朵排成了一行,每朵花有一个愉悦值. 秋实大哥每天要对着某一段连续的花朵歌唱,然后这些花朵的愉 ...
- UESTC-1057 秋实大哥与花(线段树+成段加减+区间求和)
秋实大哥与花 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- UESToj 1057 秋实大哥与花 ( 线段树
秋实大哥与花 Description 秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前. 所以秋实大哥精心照料了很多花朵.现在所有的花朵排成了一行,每朵花有一个愉悦值. 秋实大哥每天要对着某一段 ...
- UESTC - 1057 秋实大哥与花 线段树模板题
http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...
最新文章
- 过年回家应对七大姑八大姨,程序猿绝了!
- 【重发】终于提交了项目第一个版本到git@osc了。兴奋ing
- 【直播资料下载】Python第五讲——关于爬虫如何做js逆向的思路
- SharePoint 账号
- Python tcp编程,TCP服务端和TCP客户端代码编写
- 发送结构化数据Client端
- Pmwiki基本编辑功能
- Ubuntu18.04在线安装JDK1.8
- 如何用postman发送post请求
- Leetcode刷题指南和top100题目
- 爬去图片插件_学不会你打我,一个插件爬取亚马逊数据!
- android7.0+关闭wifi连接CA验证
- android 隐藏桌面图标
- 使用CSS控制表单样式/示例演示
- DSP 2812: 使用C++封装外设时钟控制
- echarts设置主标题和副标题样式
- rpm -qa的意思详解
- 一个在线的文件密码破解网站( rar文件、zip文件、pdf文件、ppt文件、xls文件)
- python 从字符串中提取数字
- win7旗舰版6l打印机咋安驱动_打印机安装不了,教您解决打印机驱动安装不了
热门文章
- Linux 内核裁剪方法
- 学计算机二手笔记本,二手笔记本中的套路 坑你就跟玩一样
- conflicting requests nothing provides libpq.so.5(RHPG_9.6)(64bit) needed **
- OCR文档识别的工作原理
- 看了一遍蝴蝶效应1,在看到了一篇很好的《蝴蝶效应1》影评
- DAY5 C高级笔记
- ML:MLOps系列讲解之系列知识解读之完整总结系列内容(第一章~第九章)
- 神箭手 美国亚马逊_亚马逊会摧毁美国的购物中心吗?还是会拯救它们?
- 定义一个点(point)类表示二维空间的点(x,y)
- 使用 BOL API 创建 SAP CRM IBASE 数据