rt WA on #3
// Author:zymooll
#include<bits/stdc++.h>
#define getchar getchar_unlocked
#define putchar putchar_unlocked
#define int long long
using namespace std;
int read(){
int s=0,w=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')w=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
s=s*10+c-'0';
c=getchar();
}
return s*w;
}
void print(int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>=10)print(x/10);
putchar(x%10+'0');
return;
}
const int PMax=1e9;
const int NMax=4e4;
int n;
struct Node{
int n,l,r,lz;
}t[64*NMax];
int ncnt=1;
void lzdown(int p,int L,int R,int mid){
if(!t[p].lz)return;
if(!t[p].l)t[p].l=++ncnt;
if(!t[p].r)t[p].r=++ncnt;
if(t[t[p].l].lz&&t[t[p].r].lz)return;
t[p].lz--;
t[t[p].l].lz++;
t[t[p].r].lz++;
t[t[p].l].n=mid-L+1;
t[t[p].r].n=R-(mid+1)+1;
return;
}
int modify1(int p,int L,int R,int l,int r){
if(!p)p=++ncnt;
if(l<=L&&R<=r){
t[p].lz++;
t[p].n=R-L+1;
return p;
}
int mid=(L+R)/2;
lzdown(p,L,R,mid);
if(l<=mid)t[p].l=modify1(t[p].l,L,mid,l,r);
if(r>mid)t[p].r=modify1(t[p].r,mid+1,R,l,r);
t[p].n=t[t[p].l].n+t[t[p].r].n;
return p;
}
void modify2(int p,int L,int R,int l,int r){
if(!p)return;
if(l<=L&&R<=r&&t[p].lz){
t[p].lz--;
if(!t[p].lz)t[p].n=t[t[p].l].n+t[t[p].r].n;
return;
}
int mid=(L+R)/2;
lzdown(p,L,R,mid);
if(l<=mid)modify2(t[p].l,L,mid,l,r);
if(r>mid)modify2(t[p].r,mid+1,R,l,r);
t[p].n=t[t[p].l].n+t[t[p].r].n;
// cerr<<p<<" "<<L<<" "<<R<<" "<<l<<" "<<r<<" "<<t[p].n<<endl;
}
struct Edge{
int h,l,r;
friend bool operator < (Edge aa,Edge bb){
return aa.h<bb.h;
}
};
vector<Edge>edge;
int ans;
signed main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
n=read();
edge.push_back((Edge){0,114514,114514});
for(int i=1;i<=n;i++){
int l=read(),r=read(),h=read();
edge.push_back((Edge){h,l,r-1});
}
sort(edge.begin(),edge.end());
for(int i=1;i<=n;i++){
modify1(1,1,PMax,edge[i].l,edge[i].r);
}
for(int i=1;i<=n;i++){
// cerr<<i<<" "<<ans<<" "<<t[1].n<<" "<<edge[i].h<<endl;
ans+=t[1].n*(edge[i].h-edge[i-1].h);
modify2(1,1,PMax,edge[i].l,edge[i].r);
}
print(ans);
return 0;
}
附测试点:
Sample3 Input:
10
18 27 8
14 35 11
13 18 9
31 34 15
13 40 13
6 10 17
12 40 11
1 3 1
27 30 1
40 43 9
Sample3 Output:
465
MyCode Output:
456
感谢!