秋实大哥与线段树

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

“学习本无底,前进莫徬徨。” 秋实大哥对一旁玩手机的学弟说道。

秋实大哥是一个爱学习的人,今天他刚刚学习了线段树这个数据结构。

为了检验自己的掌握程度,秋实大哥给自己出了一个题,同时邀请大家一起来作。

秋实大哥的题目要求你维护一个序列,支持两种操作:一种是修改某一个元素的值;一种是询问一段区间的和。

Input

第一行包含一个整数n,表示序列的长度。

接下来一行包含n个整数ai,表示序列初始的元素。

接下来一行包含一个整数m,表示操作数。

接下来m行,每行是以下两种操作之一:

  1. 1 x v : 表示将第x个元素的值改为v
  2. 2 l r : 表示询问[l,r]这个区间的元素和

1≤n,m,v,ai≤1000001≤n,m,v,ai≤100000,1≤l≤r≤n1≤l≤r≤n。

Output

对于每一个22 ll rr操作,输出一个整数占一行,表示对应的答案。

Sample input and output

Sample Input Sample Output
  1. 3
  2. 1 2 3
  3. 3
  4. 2 1 2
  5. 1 1 5
  6. 2 1 2
  1. 3
  2. 7

Source

2015 UESTC Training for Data Structures

 
 答案要用longlong存
//线段树
 
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. using namespace std;
  6.  
  7. int m,n;
  8. int a[];
  9.  
  10. struct data
  11. {
  12. long long sum;
  13. }node[];
  14.  
  15. void build(int pos,int l,int r)
  16. {
  17. if(l==r)
  18. {
  19. node[pos].sum=a[l];
  20. return ;
  21. }
  22. int mid=l+r>>;
  23. int lson=pos*,rson=lson+;
  24. build(lson,l,mid);
  25. build(rson,mid+,r);
  26. node[pos].sum=node[lson].sum+node[rson].sum;
  27. }
  28. long long int query(int pos,int l,int r,int ql,int qr)
  29. {
  30. if(l==ql&&r==qr)return node[pos].sum;
  31. int mid=l+r>>;
  32. int lson=pos*,rson=lson+;
  33. if(qr<=mid)return query(lson,l,mid,ql,qr);
  34. else if(ql>mid)return query(rson,mid+,r,ql,qr);
  35. else return query(lson,l,mid,ql,mid)+query(rson,mid+,r,mid+,qr);
  36. }
  37. void modify(int pos,int l,int r,int m,int v)
  38. {
  39. if(l==r)
  40. {
  41. node[pos].sum=v;
  42. return ;
  43. }
  44. int mid=l+r>>;
  45. int lson=pos*,rson=lson+;
  46. if(m<=mid)modify(lson,l,mid,m,v);
  47. else modify(rson,mid+,r,m,v);
  48. node[pos].sum=node[lson].sum+node[rson].sum;
  49. }
  50. int main()
  51. {
  52. int caozuo,x,v;
  53. scanf("%d",&n);
  54. for(int i=;i<=n;++i)scanf("%d",&a[i]);
  55. build(,,n);
  56. scanf("%d",&m);
  57. for(int i=;i<=m;i++)
  58. {
  59. scanf("%d%d%d",&caozuo,&x,&v);
  60. if(caozuo==)
  61. {
  62. modify(,,n,x,v);
  63. }
  64. else
  65. {
  66. printf("%lld",query(,,n,x,v));
  67. puts("");
  68. }
  69. }
  70. return ;
  71. }

QAQ

 http://acm.uestc.edu.cn/#/status/list?problemId=1073
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

P1812多项式输出

 
 

描述

一元 n 次多项式可用如下的表达式表示:

其中,aixi 称为i次项,ai称为i次项的系数。给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式:

1. 多项式中自变量为x,从左到右按照次数递减顺序给出多项式。 
2. 多项式中只包含系数不为0 的项。

3. 如果多项式n 次项系数为正,则多项式开头不出现“+”号,如果多项式n 次项系数为负,则多项式以“-”号开头。

4. 对于不是最高次的项,以“+”号或者“-”号连接此项与前一项,分别表示此项系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于0 次的项,其系数的绝对值为1,则无需输出1)。如果x 的指数大于1,则接下来紧跟的指数部分的形式为“x^b”,其中b 为x 的指数;如果x 的指数为1,则接下来紧跟的指数部分形式为“x”; 如果x 的指数为0,则仅需输出系数即可。

5. 多项式中,多项式的开头、结尾不含多余的空格。

格式

输入格式

共有2 行。 
第一行 1 个整数,n,表示一元多项式的次数(1 ≤ n ≤ 100)。

第二行有 n+1 个整数,其中第i 个整数表示第n-i+1 次项的系数,每两个整数之间用空格隔开。
多项式各次项系数的绝对值均不超过100。

输出格式

共1 行,按题目所述格式输出多项式。

样例1

样例输入1

 
  1. 5
  2. 100 -1 1 -3 0 10

样例输出1

 
  1. 100x^5-x^4+x^3-3x^2+10

 
 https://vijos.org/p/1812
 
 

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. using namespace std;
  7.  
  8. int n,a[];
  9. int main()
  10. {
  11. scanf("%d",&n);
  12. for(int i=n;i>=;--i)scanf("%d",&a[i]);
  13. for(int i=n;i>=;--i)
  14. {
  15. if(a[i]==)
  16. {
  17. if(i==n)printf("x^%d",i);
  18. else printf("+x^%d",i);
  19. }
  20. if(a[i]==-)printf("-x^%d",i);
  21. if(a[i]<-)printf("%dx^%d",a[i],i);
  22. if(a[i]>)
  23. {
  24. if(i==n)printf("%dx^%d",a[i],i);
  25. else printf("+%dx^%d",a[i],i);
  26. }
  27. }
  28. if(a[]==)printf("+x");
  29. if(a[]<)printf("%dx",a[]);
  30. if(a[]>)printf("+%dx",a[]);
  31.  
  32. if(a[]>)printf("+%d",a[]);
  33. if(a[]<)printf("%d",a[]);
  34. puts("");
  35. return ;
  36. }

QAQ心疼蠢哭的自己

纯模拟QAQ

注意最后一项和倒二项还有第一项的判断 其他都很简单

最后一项直接输出 不带x的

倒二项没有^1

第一项如果是正的不能直接输出‘+’

又重做了一遍
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define maxn 1000005
  6. using namespace std;
  7. int n;
  8. int a[];
  9. int main()
  10. {
  11. cin>>n;
  12. int time=n+;
  13. for(int i=n;i>=;--i)
  14. {
  15. scanf("%d",&a[i]);
  16. }
  17. for(int i=n;i>=;--i)
  18. {
  19. if(i==n)
  20. {
  21. if(a[i]==)printf("x^%d",i);
  22. if(a[i]==-)printf("-x^%d",i);
  23. if(a[i]!=&&a[i]!=&&a[i]!=-) printf("%dx^%d",a[i],i);
  24. }
  25. else if(i>&&i<n)
  26. {
  27. if(a[i]==)printf("+x^%d",i);
  28. else if(a[i]==-)printf("-x^%d",i);
  29. else if(a[i]>) printf("+%dx^%d",a[i],i);
  30. else if(a[i]<)printf("%dx^%d",a[i],i);
  31. else continue;
  32. }
  33. else
  34. {
  35. if(a[i]==)printf("+x",i);
  36. else if(a[i]==-)printf("-x",i);
  37. else if(a[i]>) printf("+%dx",a[i]);
  38. else if(a[i]<)printf("%dx",a[i]);
  39. else continue;
  40. }
  41. }
  42. if(a[]>)printf("+%d",a[]);
  43. if(a[]<)printf("%d",a[]);
  44. return ;
  45. }
 
 
 
 
 
 
 
 
 
 
 

P1282佳佳的魔法照片
 

背景

佳佳的魔法照片(Magic Photo):如果你看过《哈利·波特》,你就会知道魔法世界里的照片是很神奇的。也许是因为小魔法师佳佳长的太帅,很多人都找他要那种神奇的魔法照片,而且还都要佳佳和他的MM的合照。那些照片可是非常珍贵的,他到底应该把照片给谁呢?

描述

一共有n个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人。佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i]。然后将初始权值从大到小进行排序,每人就有了一个序号D[i](取值同样是1--n)。按照这个序号对10取模的值将这些人分为10类。也就是说定义每个人的类别序号C[i]的值为(D[i]-1) mod 10 +1,显然类别序号的取值为1--10。第i类的人将会额外得到E[i]的权值。你需要做的就是求出加上额外权值以后,最终的权值最大的k个人,并输出他们的编号。在排序中,如果两人的W[i]相同,编号小的优先。

格式

输入格式

第一行输出用空格隔开的两个整数,分别是n和k。

第二行给出了10个正整数,分别是E[1]到E[10]。

第三行给出了n个正整数,第i个数表示编号为i的人的权值W[i]。

输出格式

只需输出一行用空格隔开的k个整数,分别表示最终的W[i]从高到低的人的编号。

样例1

样例输入1

 
  1. 10 10
  2. 1 2 3 4 5 6 7 8 9 10
  3. 2 4 6 8 10 12 14 16 18 20

样例输出1

 
  1. 10 9 8 7 6 5 4 3 2 1

限制

1秒

提示

对于50%的数据,n<=200;


 
 https://vijos.org/p/1282
 
 先模拟 然后用结构体排序即可
//不知道能不能用的stable_sort不知道资不资磁
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. #define maxn 50005
  7. using namespace std;
  8.  
  9. struct data
  10. {
  11. int w,id;
  12. }node[maxn];
  13. bool cmp(data a,data b)
  14. {
  15. if(a.w==b.w)return a.id<b.id;
  16. else return a.w>b.w;
  17. }
  18. int n,k;
  19. int e[];
  20. int main()
  21. {
  22. scanf("%d%d",&n,&k);
  23. for(int i=;i<=;++i)scanf("%d",&e[i]);
  24. for(int i=;i<=n;++i)
  25. {
  26. scanf("%d",&node[i].w);
  27. node[i].id=i;
  28. }
  29. sort(node+,node++n,cmp);
  30. for(int i=;i<=n;++i)
  31. {
  32. node[i].w+=e[(i-)%+];
  33. }
  34. sort(node+,node++n,cmp);
  35. for(int i=;i<=k;i++)printf("%d ",node[i].id);
  36. puts("");
  37. return ;
  38. }

++rp

 
 
 

1020 孪生蜘蛛

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
题目描述 Description

在G城保卫战中,超级孪生蜘蛛Phantom001和Phantom002作为第三层防卫被派往守护内城南端一带极为隐秘的通道。

根据防护中心的消息,敌方已经有一只特种飞蛾避过第二层防卫,直逼内城南端通道入口。但优秀的蜘蛛已经在每个通道内埋下了坚固的大网,无论飞蛾进入哪个通道,他只有死路一条!(因为他是无法挣脱超级蛛网的)

现在,001和002分别驻扎在某两个通道内。各通道通过内线相通,通过每条内线需要一定的时间。当特种飞蛾被困某处,001或002会迅速赶来把它结果掉(当然是耗时最少的那个)。

001跟002都想尽早的完成任务,他们希望选择在最坏情况下能尽早完成任务的方案。

 

输入描述 Input Description

第一行为一个整数N (N<=100) 表示通道数目。

接下来若干行每行三个正整数a,b,t 表示通道a,b有内线相连,通过的时间为t。(t<=100)

(输入保证每个通道都直接/间接连通)

输出描述 Output Description

两个不同的整数x1,x2,分别为001,002驻扎的地点。(如果有多解,请输出x1最小的方案,x1相同则输出x2最小的方案)

样例输入 Sample Input

3

1 2 5

2 3 10

3 1 3

样例输出 Sample Output

1 2

数据范围及提示 Data Size & Hint
 

分类标签 Tags Floyd 枚举 图论


 
 http://codevs.cn/problem/1020/
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

套题T3的更多相关文章

  1. 【套题】qbxt国庆刷题班D1

    Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...

  2. 第46套题【STL】【贪心】【递推】【BFS 图】

    已经有四套题没有写博客了.今天改的比较快,就有时间写.今天这套题是用的图片的形式,传上来不好看,就自己描述吧. 第一题:单词分类 题目大意:有n个单词(n<=10000),如果两个单词中每个字母 ...

  3. Educational Codeforces Round 15 套题

    这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题 A:求连续最长严格递增的的串,O(n)简单dp #include <cstdio> #include <cstdlib& ...

  4. Moscow Pre-Finals Workshop 2016. Japanese School OI Team Selection. 套题详细解题报告

    写在前面 谨以此篇题解致敬出题人! 真的期盼国内也能多出现一些这样质量的比赛啊.9道题中,没有一道凑数的题目,更没有码农题,任何一题拿出来都是为数不多的好题.可以说是这一年打过的题目质量最棒的五场比赛 ...

  5. 【套题】qbxt国庆刷题班D2

    D2 今天的题感觉还是好妙的 T1 传送门 Description 现在有一张\(n\)个节点\(m\)条边的无向连通图\(G=(V,E)\),满足这张图中不存在长度大于等于3的环且图中没有重边和自环 ...

  6. Tarjan & LCA 套题题目题解

    刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <se ...

  7. 套题 codeforces 361

    A题((Mike and Cellphone) 看起来好像需要模拟数字键位的运动,可是,只要判断出那些必然YES的数字组合不就好了么 #include <cstdio> #include ...

  8. 套题 codeforces 360

    A题:Opponents 直接模拟 #include <bits/stdc++.h> using namespace std; ]; int main() { int n,k; while ...

  9. 套题 codeforces 359

    A题:Free Ice Cream 注意要使用LL,避免爆int #include <bits/stdc++.h> #define scan(x,y) scanf("%d%d&q ...

随机推荐

  1. netstat监控大量ESTABLISHED连接与Time_Wait连接问题(转载)

    问题描述: 在不考虑系统负载.CPU.内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连接. # netstat -n | awk '/^tcp/ {++y[$NF] ...

  2. WInform启动另一个项目传值

    背景:从A项目中登陆后,跳转到B项目的某个页面(B不再登陆). A项目启动进程: public Form1() { InitializeComponent(); } #region 调用进程 [Dll ...

  3. aspx利用cookie值来停止silverlight中的计时器

    一.silverlight与silverlight中可以利用委托(delegate)来刷新frame.Refresh() 1.在子类中定义委托捕捉关闭事件按钮 public delegate void ...

  4. js----深入理解闭包

    闭包算是js里面比较不容易理解的点,尤其是对于没有编程基础的人来说. 其实闭包要注意的就那么几条,如果你都明白了那么征服它并不是什么难事儿.下面就让我们来谈一谈闭包的一些基本原理. 闭包的概念 一个闭 ...

  5. 如果在配置中将“system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled”设置为 true,则需要终结点指定相对地址。如果在终结点上指定相对侦听 URI,则该地址可以是绝对地址。若要解决此问题,请为终结点“http://localhost/Service1.svc”指定相对 URI。

    问题: 如果在配置中将"system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled"设置为 ...

  6. C# 使用隐式或显示实现接口的区别

    通俗的来讲,"显示接口实现"就是使用接口名称作为方法名的前缀;而传统的实现方式称之为:"隐式接口实现".费话不说,例子如下:      interface IA ...

  7. openerp学习笔记 计算字段支持搜索

    示例1: # -*- encoding: utf-8 -*-import poolerimport loggingimport netsvcimport toolslogger = netsvc.Lo ...

  8. c语言知识点总结(摘自head first c)

    gcc name.c -o name;   ./name或者gcc name.c -o name &&  ./name;同时执行关键字:void sizeof(运算符,它能告诉你某样东 ...

  9. 表达式语言之EL表达式

    1.EL的用法EL的起源:起源于JSTL.EL运算符: 算术型:+.-.*./.div.%.mod.其中/和div都表示求除.%和mod表示求余数. 逻辑型:and或&&.or或||. ...

  10. hadoop集群默认配置和常用配置【转】

    转自http://www.cnblogs.com/ggjucheng/archive/2012/04/17/2454590.html 获取默认配置 配置hadoop,主要是配置core-site.xm ...