计算机明天要交作业了。。。。大神救我~~~题目:自己设计一个C语言程序,不少于80句程序语句~~~

计算机明天要交作业了。。。。大神救我~~~题目:自己设计一个C语言程序,不少于80句程序语句~~~~~~~额,有谁会吗,不要忽视我π_πT_T~~~~

给你个简单段树的题把:

题目是:

很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。
这让很多学生很反感。

不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。

 


Input

本题目包含多组测试,请处理到文件结束。
在每个测试的第一行,有两个正整数 N 和 M ( 0<N<=200000,0<M<5000 ),分别代表学生的数目和操作的数目。
学生ID编号分别从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。
当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。
当C为'U'的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。

 


Output

对于每一次询问操作,在一行里面输出最高成绩。

 


Sample Input

5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5

 


Sample Output

5
6
5
9

代码是:

#include <stdio.h>
#include <algorithm>
#include <string.h>
#define N 200005
using namespace std;

struct mem{
int l, r, num;
}a[N*4];

int fen[N];


void build(int left,int right,int root)
{
a[root].l=left;
a[root].r=right;
if(left==right)
{
a[root].num=fen[left];
return;
}
int mid=(left+right)/2;
build(left,mid,root*2);
build(mid+1,right,root*2+1);
a[root].num=max(a[root*2].num,a[root*2+1].num);
return;
}

void update(int p,int q,int root)
{
if(a[root].l==a[root].r&&a[root].l==p)
{
a[root].num=q;
return;
}
if(p<=a[root*2].r)
{
update(p,q,root*2);
}
else
{
update(p,q,root*2+1);
}
a[root].num=max(a[root*2].num,a[root*2+1].num);
return;
}

int query(int left,int right,int root)
{
if(a[root].l==left&&a[root].r==right)
{
return a[root].num;
}
if(right<=a[root*2].r)
{
return query(left,right,root*2);
}
else if(left>=a[root*2+1].l)
{
return query(left,right,root*2+1);
}
else{
int mid=(a[root].l+a[root].r)/2;
return max(query(left,mid,root*2),query(mid+1,right,root*2+1));
}
}
main()
{
int i, j, n, m, x, y;
char c[2];
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
scanf("%d",&fen[i]);
getchar();
build(1,n,1);
while(m--)
{
scanf("%s%d%d",&c,&x,&y);
getchar();
        if(strcmp(c,"U")==0)
          {
        update(x,y,1);
          }
         if(strcmp(c,"Q")==0)
          {
           printf("%d\n",query(x,y,1));
           }
}

}
}

 题目来源   HDU1754

追问

哇,大神真多勒,多谢啦~~~😘

追答

求采纳

追问

收到了好多。大神们都亲苦了,我会好好考虑再写作业的。~~~☺

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-10
万年历,
#include <stdio.h>
main(int a,char **date)
{
int year=0,month=0,day=0,week;
int d,i,dm,dy,m2;
char WEEK[9];
if (a==1)
{
printf ("\n ERROR! you forgot to enter the date you want to view\n");
exit (0);
}
i=0; d=-1;
while (date[1][i])/*遍历传入的参数日期,计算出year,month,day*/
{
if ((date[1][i]=='/'||date[1][i]=='.')&&d==-1) { d=0; i++; continue; }
if ((date[1][i]=='/'||date[1][i]=='.')&&d==0) { d=1; i++; continue; }
if (d==-1) year=year*10+(date[1][i]-'0');
if (d==0) month=month*10+(date[1][i]-'0');
if (d==1) day=day*10+(date[1][i]-'0');
i++;
}
if (month<1||month>12)/*若月份传入错误数字*/
{
printf ("\n ERROR! the entered MONTH is invalid\n");
exit (0);
}
if (year==2000)
{
dy=0; /*年引起的星期差为0个*/
m2=1; /*2月引起的星期差为1个*/
goto la_100;
}
if (year>2000)
d=(year-1-2000)/4-(year-1-2000)/100+(year-1-2000)/400+1;
else
d=(year-2000)/4-(year-2000)/100+(year-2000)/400;
dy=(year-2000)+d; /*** 该年 1月1号 到2000年1月1号的 " 星期差 " ***/
if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))
m2=1;
else
m2=0; /*** 该年是否润 ***/
la_100: /**** la_100 ****/
/*** 该月以前的月所引起的 " 星期差 " ***/
switch (month)
{
case 1: dm=0; month=31; break; /*** month 在此存放该月天数 ***/
case 2: dm=3; month=d==1? 29:28; break;
case 3: dm=3+m2; month=31; break;
case 4: dm=6+m2; month=30; break;
case 5: dm=1+m2; month=31; break;
case 6: dm=4+m2; month=30; break;
case 7: dm=6+m2; month=31; break;
case 8: dm=2+m2; month=31; break;
case 9: dm=5+m2; month=30; break;
case 10: dm=m2; month=31; break;
case 11: dm=3+m2; month=30; break;
case 12: dm=5+m2; month=31; break;
}
if (day<0||day>month)
{
printf ("\n ERROR! the entered DAY is invalid\n");
exit (0);
}
week=(dy+dm+day-1+6)%7;
if(week<0)
week+=7;
if (day>0) /*** 判定查看类型 ***/
{
switch (week)
{
case 0: strcpy (WEEK,"SUNDAY"); break;
case 1: strcpy (WEEK,"MONDAY"); break;
case 2: strcpy (WEEK,"TUESDAY"); break;
case 3: strcpy (WEEK,"WEDNESDAY"); break;
case 4: strcpy (WEEK,"THURSDAY"); break;
case 5: strcpy (WEEK,"FRIDAY"); break;
case 6: strcpy (WEEK,"SATURDAY"); break;
}
printf ("\n this day is %s \( %d \)\n\n OK!\n",WEEK,week);
}
else
{
week=++week%7;
printf ("\n the calender of this month as following\n");
printf ("\n *********************************\n");
printf (" SUN MON TUE WEN THU FRI STA\n");
for (i=0;i<week;i++)
printf (" ");
for (i=1;i<=month;i++)
{
printf (" %2d ",i);
week++;
if (week%7==0&&i!=month)
printf ("\n");
}
printf ("\n *********************************\n");
printf ("\n OK!\n");
}
}追问

额,大神这程序是用来干什么的

追答

万年历,很简单。

追问

😓😓😓。。。多谢大神

👍👍👍

非常感谢哦

😘😘😘

第2个回答  2014-06-10
什么内容都可以?追问

嗯嗯。

但是要正常一点的,

最好是计算个什么函数,或是要执行一个什么任务~→_→救我

追答

正常点的?只要不太难就行吧,我找找

追问

嗯嗯

追答

可以有多个功能吗?

追问

嗯嗯。达到八十条语句就行了

追答

90行左右,这个可以吧,对3个同学信息按身高排序

追问

行啊

追答

求采纳哟,亲,这个挺简单的不复杂,很容易看明白,\(^o^)/~,代码放在上传TXT文件里了

追问

程序在哪😓

追答

上传了个TXT文件,代码在里面,我这边不知道啥问题代码贴了发不上

追问

😥😥😥没事。

我看看别人的,不妇意思了

😘还是谢谢大神的

追答

嗯嗯,没关系,每个都看一下,对自己有帮助 O(∩_∩)O

追问

☺谢支持了

相似回答