scanf快于cin
一开始cin然后tle后来改了a了
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,m;
char c[10];
const int maxn=100010;
typedef long long ffi;//fangzhi bao int
struct NODE
{
int l,r;
ffi sum,lazy;
void update(ffi val)
{
sum=val*(r-l+1);
lazy=val;
//cout<<"?"<<sum<<"
"<<lazy<<endl;
}
}node[maxn<<2];
void pushup(int nd)
{
node[nd].sum=node[nd<<1].sum+node[nd<<1|1].sum;
}
void pushdown(int nd)
{
ffi laz=node[nd].lazy;
if(laz)
{
node[nd<<1].update(laz);
node[nd<<1|1].update(laz);
node[nd].lazy=0;
}
}
void build(int l,int r,int nd)
{
node[nd].l=l;
node[nd].r=r;
node[nd].lazy=0;
if(l==r)
{
node[nd].sum=1;
//cout<<"?"<<l<<"
"<<node[nd].sum<<endl;
return;
}
int mid=(l+r)>>1;
build(l,mid,nd<<1);
build(mid+1,r,nd<<1|1);
pushup(nd);
}
void update(int nl,int nr,int val,int nd)
{
int L=node[nd].l,R=node[nd].r;
if(nl<=L&&R<=nr)
{
node[nd].update(val);
return;
}
pushdown(nd);
int mid=(L+R)>>1;
if(nl<=mid)update(nl,nr,val,nd<<1);
if(nr>mid)update(nl,nr,val,nd<<1|1);
pushup(nd);
}
ffi query(int nl,int nr,int nd)
{
int L=node[nd].l,R=node[nd].r;
if(nl<=L&&R<=nr)return node[nd].sum;
pushdown(nd);
ffi ans=0;int mid=(L+R)>>1;
if(nl<=mid)ans+=query(nl,nr,nd<<1);
if(nr>mid)ans+=query(nl,nr,nd<<1|1);
pushup(nd);
return ans;
}
int q;
int main()
{
int t;scanf("%d",&t);
for(int cas=1;cas<=t;cas++)
{scanf("%d%d",&n,&q);
build(1,n,1);
int nl,nr,val;
while(q--)
{
scanf("%d%d%d",&nl,&nr,&val);//cin>>nl>>nr>>val;
update(nl,nr,val,1);
}
printf("Case %d: The total value of the hook is
%I64d.\n",cas,query(1,n,1));
//cout<<"Case "<<cnt<<": The total
value of the hook is "<<node[1].sum<<endl;
}
}